我是java处女。我已经制作了如下的非常简单的代码。
class TreeData implements Comparable<TreeData> {
private String sixString;
private ArrayList<Integer> stringNum = new ArrayList<Integer>();
private ArrayList<Integer> charNum = new ArrayList<Integer>();
public TreeData(String sixString, int stringNum, int charNum){
this.sixString = sixString;
(this.stringNum).add(stringNum);
(this.charNum).add(charNum);
}
public int compareTo(TreeData other) {
return sixString.compareTo(other.getSixString());
}
public String getSixString(){
return sixString;
}
}
class Child<T extends Comparable<T>>{
public void print(T data){
//error : String a = data.getSixString();
System.out.println("hi");
}
}
public class Test {
public static void main(String[] args) {
Child<TreeData> child = new Child<TreeData>();
TreeData td = new TreeData("sixString", 8, 2);
child.print(td);
}
}
我在&#39; print&#39;中遇到了问题。 Child类中的方法。当我尝试调用数据的getSixString()方法(作为参数传递)时,它会发生错误。我不知道为什么我不能在论证数据中使用公共方法。它与Generic有关吗?提前谢谢。
答案 0 :(得分:1)
在您的Child类中,您只定义T以扩展Comparable。但是你希望它拥有Comparable没有的方法getSixString。你可能希望它扩展TreeData:
class Child<T extends TreeData>{
public void print(T data){
String a = data.getSixString();
//should work now since T defines getSixString()
}
}
或者更好的是,如果你想要的是T是TreeData,你不需要任何泛型类。我假设你的真实意图是:
class Child extends TreeData {
public void print(){
String a = getSixString();
}
}