0

我完全坚持我的业余项目。我有 MySingleton 实现MyInterface和调用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();while 实现方法。您应该删除分号。

于 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 回答