-1
class example{ 
    private int x=1;
    public int xreturned(){
    return x;
   }
}
class example2<N>{
    example2<N> variable;
    public int fun(){
        int x=variable.xreturned(); 
    }
}
class mainclass{
    public static void main(String[] args){
       example2<example>obj=new example2<example>();
       if(1.equals(obj.fun()))
       System.out.println("correct");
       return 0;
   }
}

在 fun 函数变量中的 example2 类中找不到类示例的 xreturned() 函数,我怎样才能让它找到它?现在你可能会问我应该如何找到它?我想有可能找到它,因为 obj 具有示例(示例类的类型)通用 .. 所以请告诉我如何让它以最少的更改找到它

4

2 回答 2

4

在运行时,由于类型擦除,无法确定提供了什么类。在您的情况下,看起来 N 将始终属于示例类型,因此您的类定义可能是

class Example2<N extends Example> 

这将使您的示例工作,但我怀疑它可能过于简化以突出一个点(或家庭作业)。

于 2012-10-08T20:25:06.360 回答
1

除了大卫的回答和安娜的评论,这里是完整的代码(经过测试)

请注意我必须做的一些其他更改才能使其编译(请参阅注释和解释)

class Example{ 
    private int x=1;
    public int xreturned(){
    return x;
   }
}
class Example2<N extends Example> { //as in David's answer
    N variable; //as in Anna's comment
    public int fun(){
        int x=variable.xreturned(); 
        return x;
    }
}
class Mainclass{
    public static void main(String[] args){
       Example2<Example>obj=new Example2<Example>();
       if(1 == obj.fun()) // 1 doesn't have an equals method
           System.out.println("correct"); //indentation added, it's a condition

       //return 0; <-- you can't return 0 from main, it's return type is void
   }
}
于 2012-10-08T21:17:30.770 回答