我有一個方法可能會返回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