4

メソッドをオーバーライドしようとすると、Javaで問題が発生しました。コードは次のとおりです。

public abstract class CustomAdapter{
    public abstract Boolean addItem(Class<? extends Object> aObject);
}

public class RainAdapter extends CustomAdapter {
    @Override
    public Boolean addItem(ClassOfRain aRainInfo) {
        // do something
    return true;
    }
}

「Class」を「ClassOfRain」に宣言できますか?はいの場合、どうすればよいですか?

読んでくれてありがとう!

4

4 に答える 4

5

あなたは少し混乱していると思います。次のことを言おうとしているのではありませんか?

public abstract class CustomAdapter<T extends Object> {
    public abstract Boolean addItem(T aObject);
}

public class RainAdapter extends CustomAdapter<Rain> {
    @Override
    public Boolean addItem(Rain aRainInfo) {
        // do something
        return true;
    }
}

クラス構造の私の解釈では、ジェネリックaddItemメソッドを作成しようとしているため、実際のクラス オブジェクトを渡すことは役に立ちません。

于 2012-04-13T09:51:13.787 に答える
0

それは不可能です。メソッドのオーバーライドとは、まったく同じメソッド ヘッダーを配置することを意味します。変更できるのは、指定されたパラメーターの名前だけです。

于 2012-04-13T09:50:40.203 に答える
0

Class<Rain.class>Rainクラスの反映を保持します。ただし、オーバーライドされたメソッドには同じ仮パラメーターが必要なため、これは機能しませんClass<? extends Object>

于 2012-04-13T09:51:11.247 に答える
0

抽象/インターフェイスメソッドを実装するとき、および/または上書きするときは、メソッドのシグネチャが一致する必要があります...このようなことを行うことができます

public abstract class CustomAdapter{
    public abstract Boolean addItem( Object o );
}

public class RainAdapter extends CustomAdapter {

    public Boolean addItem( Object o ){
        if ( o.getClassName().equals( "ClassOfRain" ) ){
            return this.addItem( (ClassOfRain) o );
        }
        return false;
    }
    private Boolean addItem(ClassOfRain aRainInfo) {
        // do something
        return true;
    }
}  
于 2012-04-13T09:51:35.520 に答える