0

我需要检查一个条件,如果满足,我需要返回一个类,如果不满足,我需要返回另一个类

private <T> d(String example) {

        if(example.startsWith("example1"))
            return new example1();
        else if((example.startsWith("example2"))
            return new example2();

    }

我不确定如何退货,请您解释一下。

4

3 回答 3

2

您应该为可以返回的两个对象返回一个超类或接口。如果您还没有为它们定义一个超类,您仍然可以返回Object并进行不太好的instanceof验证以了解哪个类已返回。

代码示例:

class SuperClass {
}

class MyClass1 extends SuperClass {
}

class MyClass2 extends SuperClass {
}

private SuperClass myMethod(String parameter) {
    SuperClass sc = null;
    //just trying some code, this could be replaced for your logic
    if (parameter.equals("1")) {
        sc = new MyClass1();
    } else {
        sc = new MyClass2();
    }
    return sc;
}

private void myOtherMethod(String parameter) {
    //some code here...
    SuperClass sc = myMethod(parameter);
    if (sc != null) {
        //securing the upcast...
        if (sc instanceof MyClass1) {
            //logic of MyClass1 instance...
        }
        if (sc instanceof MyClass2) {
            //logic of MyClass2 instance...
        }
    }
    //more logic over here...
}
于 2012-06-28T05:13:04.803 回答
1

在这种情况下,两个类的超类或接口必须相同,然后从函数返回该超类引用。

例如 -

class SuperClass {
// Variables

// Functions
}

class example1 extends SuperClass{

// Variables

// Functions

}

class example2 extends SuperClass{

// Variables

// Functions

}


private SuperClass d(String example) {

        if(example.startsWith("example1"))
            return new example1();
        else if((example.startsWith("example2"))
            return new example2();

}
于 2012-06-28T05:14:17.443 回答
0
private Object getObject(String example) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
    if (example.startsWith("example1"))
        return Class.forName("example1ClassName").newInstance();
    if (example.startsWith("example2")) {
        return Class.forName("example2ClassName").newInstance();
    }
    return null;
}

但是正如您所注意到的,这种方法会引发很多异常,所以要小心。您的类可能没有公共默认构造函数或一些类路径问题。它很敏感,需要强制转换操作才能使用返回值进行操作。好处是您没有任何继承/超类问题,并且可以使用任何类进行实例化。

于 2012-06-28T05:25:49.810 回答