我有一个方法可能会返回A类或B类。如何定义它的返回类型为泛型的,与返回的类类型无关。对于例如返回泛型类型
public <Generic_Class_Return_Type> showForm() {
if (true)
return new ClassA();
else
return new ClassB();
}
我有一个方法可能会返回A类或B类。如何定义它的返回类型为泛型的,与返回的类类型无关。对于例如返回泛型类型
public <Generic_Class_Return_Type> showForm() {
if (true)
return new ClassA();
else
return new ClassB();
}
你可以使用一个接口,这两个类实现这样的:
public SomeInterface showForm() {
if (true)
return new ClassA();
else
return new ClassB();
}
class ClassA implements SomeInterface{}
class ClassB implements SomeInterface{}
public object showForm()
{
if (true)
return new ClassA();
else
return new ClassB();
}
或
public superClassName showForm()
{
if (true)
return new ClassA();
else
return new ClassB();
}
最简单的方法是将它们作为对象返回。
public Object showForm() {
if (true)
return new ClassA();
else
return new ClassB();
}
虽然它不是很有用,但更有用的解决方案是让它们扩展一个通用类或实现一个通用接口。
public CommonInterface showForm() {
if (true)
return new ClassA();
else
return new ClassB();
}
class ClassA implements CommonInterface { }
class ClassB implements CommonInterface { }
interface CommonInterface { }
或者
public CommonClass showForm() {
if (true)
return new ClassA();
else
return new ClassB();
}
class ClassA extends CommonClass { }
class ClassB extends CommonClass { }
class CommonClass { }
泛型
如果你想使用泛型然后ClassA
和ClassB
将需要同一类,由一些通用的类型如修改。 Class<T>
。泛型是否相关都取决于你的类的实现。你可能最好使用接口或基类。
不能确定是否需要仿制药在这种情况下,但是可以参数化或者全班或只是方法,然后使用反射像这样:
public <T> T getForm() {
Class<T> clazz = (Class<T>) ((true) ? Foo.class : Bar.class);
Constructor<T> ctor = clazz.getConstructor();
return ctor.newInstance();
}
但是如果你指定你的使用情况,我们可以进一步提示是否要采用泛型,或者如果你最好使用标准多态。
添加相同接口的类,返回接口 – 2013-03-19 00:53:00
一种方法是只返回对象。但我想知道是否有更多的东西通用的,适合使用 公共对象showForm(){ 如果(真) 返回新ClassA的(); else return new ClassB(); } – 2013-03-19 00:53:57