我有一个可能返回 A 类或 B 类的方法。如何将其返回类型定义为通用的,与返回的类类型无关。例如
public <Generic_Class_Return_Type> showForm() {
if (true)
return new ClassA();
else
return new ClassB();
}
Not really sure if you need generics in this case, however you can parameterize either the whole class or just the method and then use reflection like this:
public <T> T getForm() {
Class<T> clazz = (Class<T>) ((true) ? Foo.class : Bar.class);
Constructor<T> ctor = clazz.getConstructor();
return ctor.newInstance();
}
However if you specify your use case, we can further suggest if going generics is the way, or if you'd better use standard polymorphism.
您可以使用两个类都实现的接口,如下所示:
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>
. 泛型是否相关都取决于您的类的实现。您可能最好使用接口或基类。