为什么我不能处理java中的参数?

时间:2015-05-16 07:31:20

标签: java generics

我是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有关吗?提前谢谢。

1 个答案:

答案 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();
    }
}