检测java中要返回的类

时间:2012-06-28 05:10:24

标签: java

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

private <T> d(String example) {

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

    }

我不知道如何归还它,请你解释一下。

3 个答案:

答案 0 :(得分: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...
}

答案 1 :(得分:1)

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

例如 -

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();

}

答案 2 :(得分: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;
}

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