0
class One {
Two two() {
    return new Two() {
        Two(){}
        Two(String s) {
            System.out.println("s= "+s);
        }
    };
    }
}

class Ajay {
    public static void main(String ...strings ){
        One one=new One();
        System.out.println(one.two());
    }
}

上記のサンプル コードはコンパイルできません。「2 つ解決できません」と表示されます。このコードの問題は何ですか??

4

3 に答える 3

1

あなたが作成している

new Two()したがって、クラスパスに有効なクラスが存在する必要があります。

成功する

class Two{

}

class One {
Two two() {
    return new Two() {
//        Two(){}
//        Two(String s) {
//            System.out.println("s= "+s);
//        }//you can't override constuctors
    };
    }
}

または new の左側に、それを機能させるためのスーパークラスまたはインターフェースが必要です

于 2011-03-01T10:30:30.467 に答える
0

Twoクラスを宣言していません。Oneclassと private memberを宣言しtwoました。ここで、は匿名構築によって初期化しようとしたクラスtwoのオブジェクトです。Two

于 2011-03-01T10:35:16.300 に答える
0
new Two() {
    Two(){}
    Two(String s) {
        System.out.println("s= "+s);
    }
};

匿名の内部クラスは、独自の名前を持たず、拡張/実装する基本クラスまたはインターフェイスの名前で参照する必要があるため、匿名と呼ばれます。

あなたの例では、匿名のサブクラスを作成するTwoためTwo、クラスまたはインターフェイスとしてどこかで宣言する必要があります。クラス Two が既に宣言されている場合は、クラスパスにないか、インポートするのを忘れています。

于 2011-03-01T11:05:29.783 に答える