Следующий класс:
public class StaticMethodsDemo {
public static class A {
public static A make() { return new A(); };
}
public static class B extends A {
public static B make() { return new B(); };
}
public static class BPrime extends A {
public static BPrime make() { return new BPrime(); };
}
public static void main(String[] args) {
B.make();
// compiles under Sun JDK 1.6.0_20 but fails under Oracle JDK 1.7.0_01. Why?
BPrime.
компилируется под Sun JDK 1.6.0_20 (64-битная Windows, но не должно иметь значения), но терпит неудачу под Oracle JDK 1.7. 0_01 (та же платформа) и OpenJDK 1.6.0_20 (Ubuntu) [1] с:
[ERROR] StaticMethodsDemo.java:[37,14] error: reference to make is ambiguous, both method make() in A and method make() in BPrime match
Почему? Как общий параметр (который следует стереть, нет?) Вызывает это очевидное несоответствие. Обратите внимание, что удаление дженериков происходит следующим образом:
...
public static class BPrime extends A {
T val;
public static BPrime> make() { return new BPrime
также компилируется и запускается (так что взлом дженериков не вызывает каких-либо странных ошибок приведения типов во время выполнения).
Проблема 461: компиляция jclouds-core не выполняется с использованием стандартного ubuntu openjdk