非泛型类中的泛型实例变量
我正在尝试编写一个具有泛型成员变量但本身不是泛型的类。具体来说,我想说的是,我有一个“实现与自身相当的某种类型”的值列表,以便我可以在该列表中调用排序......我希望这是有道理的。
我尝试做的最终结果是创建一个类,这样我就可以创建一个具有(任何给定类型)数组的所述类的实例,并让它为该列表生成字符串表示形式。在实际代码中,我还传入了我正在传入的类型类:
String s = new MyClass(Integer.class, 1,2,3).asString();
assertEquals("1 or 2 or 3", s);
String s = new MyClass(String.class, "c", "b", "a").asString();
assertEquals("\"a\" or \"b\" or \"c\"", s);
最初我甚至不想传递类,我只想传入值并让代码检查结果数组以挑选值的类...但这也给我带来了麻烦。
以下是我拥有的代码,但我无法为变量类型提出正确的mojo。
public class MyClass {
// This doesn't work as T isn't defined
final List<T extends Comparable<? super T>> values;
public <T extends Comparable<? super T>> MyClass (T... values) {
this.values = new ArrayList<T>();
for(T item : values) {
this.values.add(item);
}
}
public <T extends Comparable<? super T>> List<T> getSortedLst() {
Collections.sort(this.values);
return this.values;
}
}
变量声明行上的错误:
Syntax error on token "extends", , expected
任何帮助将不胜感激。
编辑:更新了代码以使用List而不是数组,因为我不确定是否可以用数组完成。
@Mark:从我读到的一切来看,我真的想说“T是一种与自身相当的类型”,而不仅仅是“T是一种可比的类型”。话虽如此,以下代码也不起作用:
public class MyClass {
// This doesn't work
final List<? extends Comparable> values;
public <T extends Comparable> MyClass (T... values) {
this.values = new ArrayList<T>();
for(T item : values) {
this.values.add(item);
}
}
public <T extends Comparable> List<T> getSortedLst() {
Collections.sort(this.values);
return this.values;
}
}
添加行时出错:
The method add(capture#2-of ? extends Comparable) in the type List<capture#2-of ? extends Comparable> is not applicable for the arguments (T)
排序行上的错误:
Type mismatch: cannot convert from List<capture#4-of ? extends Comparable> to List<T>
结论:
归根结底,Java似乎无法完全处理我想做的事情。问题是因为我想说的是:
我想要一个与它们本身相当的项目列表,并且我从创建时传递的数据立即创建整个列表。
但是,Java看到我有那个列表,并且无法确定我的情况的所有信息在编译时都可用,因为我可以尝试稍后将内容添加到列表中,并且由于类型擦除,它不能保证安全性。如果不将泛型类型应用于类,就不可能将我的情况所涉及的条件传达给 Java。