-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 クラスで、クラス example の xreturned() 関数が見つかりません。どうやってそれを見つけたらいいの?objには例(例のクラスのタイプ)ジェネリックがあるので、それを見つけることができると思っています..最小限の変更でそれを見つける方法を教えてください

4

2 に答える 2

4

実行時に、型の消去のためにどのクラスが提供されたかを判断する方法はありません。あなたの場合、 N は常にタイプ Example になるように見えるので、クラス定義は

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 に答える