Hallo,
ich habe folgendes Problem und zwar kompiliert dieser Code unter
Eclipse, aber nicht mit javac:
Mit javac gibt es folgenden Fehler:
Laut compiler ist also A (Foo2<?>) kein Untertyp von A extends Comparable<? super A>.
Das ganze kompiliert aber wenn ich die Klasse FOO ein wenig umschreibe:
Im Interface Comparable als Typ also jetzt nur noch eine Wildcard verlangt wird,
ohne Schranke.(Also dass der Wildcard-Typ ein Untertyp von A ist).
Dass Problem für javac ist also und korrigiert mich wenn ich falsch liege,
dass bei der Definition von:
Die Wildcard bei Foo2, jede Klasse darstellen könnte, also auch eine Klasse wo
folgende Bedingung nicht eingehalten wird:
.
ABER, das ist einfach nicht richtig, denn wenn man sich die Definition von Foo2 ansieht,
dann sieht man dass ein Untertyp von Foo2 wie Foo2b einer ist, alle Bedingungen erfüllt.
UND es gibt auch keine Variante(Zumindest sehe ich keine) bei der man einen Typ erstellen
könnte, der die Bedingung verletzt.
Ich hoffe ich hab das jetzt nicht all zu unverständlich formuliert.
ich habe folgendes Problem und zwar kompiliert dieser Code unter
Eclipse, aber nicht mit javac:
Java:
public class FOO<A extends Comparable<? super A>,T> {
}
public abstract class Foo2<T extends Foo2<T>> implements Comparable<Foo2<T>>
{
}
public class Foo2b extends Foo2<Foo2b> {
@Override
public int compareTo(Foo2<Foo2b> arg0) {
return 0;
}
}
public class Test {
public static void main(String[] arg)
{
FOO<Foo2<?>,String> p = new FOO<>();
}
}
Mit javac gibt es folgenden Fehler:
Java:
Test.java:5: error: type argument Foo2<?> is not within bounds of type-variable
A
FOO<Foo2<?>,String> p = new FOO<>();
^
where A is a type-variable:
A extends Comparable<? super A> declared in class FOO
Test.java:5: error: cannot infer type arguments for FOO<>;
FOO<Foo2<?>,String> p = new FOO<>();
^
reason: no instance(s) of type variable(s) A,T exist so that FOO<A,T> conforms
to FOO<Foo2<?>,String>
where A,T are type-variables:
A extends Comparable<? super A> declared in class FOO
T extends Object declared in class FOO
2 errors
Laut compiler ist also A (Foo2<?>) kein Untertyp von A extends Comparable<? super A>.
Das ganze kompiliert aber wenn ich die Klasse FOO ein wenig umschreibe:
Java:
public class FOO<A extends Comparable<?>,T> {
}
ohne Schranke.(Also dass der Wildcard-Typ ein Untertyp von A ist).
Dass Problem für javac ist also und korrigiert mich wenn ich falsch liege,
dass bei der Definition von:
Code:
FOO<Foo2<?>,String> p = new FOO<>();
folgende Bedingung nicht eingehalten wird:
Code:
A extends Comparable<? super A>
ABER, das ist einfach nicht richtig, denn wenn man sich die Definition von Foo2 ansieht,
dann sieht man dass ein Untertyp von Foo2 wie Foo2b einer ist, alle Bedingungen erfüllt.
UND es gibt auch keine Variante(Zumindest sehe ich keine) bei der man einen Typ erstellen
könnte, der die Bedingung verletzt.
Ich hoffe ich hab das jetzt nicht all zu unverständlich formuliert.