我需要检查一个条件,如果它满足我需要返回一个类,如果它不满意我需要返回另一个类
private <T> d(String example) {
if(example.startsWith("example1"))
return new example1();
else if((example.startsWith("example2"))
return new example2();
}
我不知道如何归还它,请你解释一下。
答案 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;
}
但是你注意到这个方法引发了很多例外,所以要小心。您的类可能没有公共默认构造函数或某些类路径问题。它很敏感,需要使用强制转换操作才能返回值。好处是您没有任何继承/超类问题,可以使用任何类进行实例化。