0

私は私のアマチュアプロジェクトで完全に立ち往生しています。MyInterfaceを実装して呼び出すMySingletonがありますMyMethod()MyMethod()パラメータとしていずれかを取る必要がMySubclsあります。MyMethod()問題は、ジェネリックなしでどのように宣言するかです。異なるパラメーターを持つ多くの宣言を使用する必要がありますか、それともジェネリックなしでは使用できませんか?

Main.java=>単一のメソッドからすべてのサブクラスの値を出力する必要があります

public class Main{
    public static void main(String[] args){
        MySubcls01 subCls01 = new MySubcls01();
        MySubcls02 subCls02 = new MySubcls02();
        MySingleton.INSTANCE.MyMethod(subCls01);
        MySingleton.INSTANCE.MyMethod(subCls02);
    }
}

enum MySingleton implements MyInterface
{
    INSTANCE;

    @Override
    public void MyMethod();// TODO - need to pass subCls01 or subCls02

    {
        System.out.println(subCls01.value);
        System.out.println(subCls02.value);
    }

}

interface MyInterface
{

    void MyMethod(); // TODO - what parameter for any subclass???

    // void MyMethod(MySubcls01 subCls01);
    // void MyMethod(MySubcls02 subCls02); => brute-force approach

    // <T> void MyMethod(T type); => shouldn't use generics

}

class MySupercls
{
    // some stuff
}

class MySubcls01 extends MySupercls
{
    String subValue = "i'm from subclass01";
}

class MySubcls02 extends MySupercls
{
    String subValue = "i'm from subclass02";
}
4

3 に答える 3

1

スーパークラスの型をパラメーターとして使用し、instanceof を使用して実際の型を決定する必要があると思います。

例:

@Override
    public void MyMethod(MySupercls inst)// TODO - need to pass subCls01 or subCls02

    {
        if (inst instanceof MySubcls01)
        {
         //cast it subclass01
        System.out.println(subCls01.value);
        }else{
         //cast it subclass02
        System.out.println(subCls02.value);
       }
    }

注:コードはpublic void MyMethod();メソッドの実装中に持っています。セミコロンを削除する必要があります。

于 2012-10-29T14:28:50.580 に答える
0

スーパークラスをパラメーターとして使用すると、すべてのサブクラスインスタンスをmyMethod()に渡すことができます。

public void MyMethod(MySuperClass yourInstance);// TODO - need to pass subCls01 or subCls02
于 2012-10-29T14:29:27.617 に答える
0

MySubcls01私があなたの質問を正しく理解していれば、あなたはとの両方に共通のタイプを期待しているはずです。MySubcls02この場合はMySupercls

MyMethod(MySupercls obj);したがって、メソッドシグネチャとして持つ必要があります。

于 2012-10-29T14:30:24.170 に答える