Generic Blues
This is too messed up, nobody can help me:
[javac] de\dclj\ram\type\tuple\ComparableLocatableTuple0.java:36:
method addrac in interface Placeable<T#2> cannot be applied to given types
[javac] components[ position ].addrac( this, position ); }
[javac] ^
[javac] required: Comparable<T#1>,int
[javac] found: ComparableLocatableTuple0<T#1>,int
[javac] where T#1,T#2 are type-variables:
[javac] T#1 extends Comparable<T#1>,Locatable<T#1> declared in class ComparableLocatableTuple0
[javac] T#2 extends Object declared in interface Placeable
I want this line to compile. If you somehow already know,
what I need to do now, please let me know. Otherwise, I try
to provide more details:
The type of ?components[ position ]? is T (in this scope),
which is given as:
< T extends java.lang.Comparable< T >& de.dclj.ram.system.locator.Locatable< T >>
The type of ?this? is ComparableLocatableTuple0:
package de.dclj.ram.type.tuple;
public class ComparableLocatableTuple0
< T extends java.lang.Comparable< T >& de.dclj.ram.system.locator.Locatable< T >>
implements de.dclj.ram.type.tuple.ComparableLocatableTuple< T >
{ ... }
More about some types used or mentioned:
package de.dclj.ram.system.locator;
public interface Locatable< T >
extends
de.dclj.ram.system.locator.Findable,
de.dclj.ram.system.locator.Placeable< T >{}
package de.dclj.ram.type.tuple;
public interface ComparableLocatableTuple< T >
extends de.dclj.ram.type.tuple.ComparableTuple< T >,
de.dclj.ram.system.locator.Locatable< T >{}
package de.dclj.ram.type.tuple;
public interface ComparableTuple< T extends java.lang.Comparable< T >>
extends java.lang.Comparable<de.dclj.ram.type.tuple.ComparableTuple< T >>,
de.dclj.ram.type.tuple.Tuple
package de.dclj.ram.system.locator;
public interface Placeable< T >
{ void addrac( java.lang.Comparable< T >container, int position ); }
(Please let me know, what else you need to do.
Should I try to extract a SSCCE from my project?)
So, ?this? is of a subtype of
java.lang.Comparable<de.dclj.ram.type.tuple.ComparableTuple< T >>
and the compiler wants
Comparable<T#1>
? The compiler cannot unify the type ?T#1? with
de.dclj.ram.type.tuple.ComparableTuple< T >?
Possibly, due to different bounds for these T?
But the type of ?this? actually extends
de.dclj.ram.type.tuple.ComparableTuple< T >
! (Albeit possibly with ?T? being in another scope and
thus having another meaning.)
I feel as if I am not smart enough for this stuff. Or I was
too much in a rush to add type parameters everywhere, so
that I did not properly document what my type parameters
actually are intended to convey.
The compiler is Java 1.7, version 7.0.0.107.
<javac
source='1.7'
target='1.7'
deprecation='on'
debug='on'
optimize='off'
>
<compilerarg line='-Xlint '/>
<compilerarg line='-Xlint:-unchecked '/>
<compilerarg line='-Xlint:-serial '/>
<compilerarg line='-Xmaxerrs 1 -Xmaxwarns 2147483647'/>
</javac>