返回泛型类类型

时间:2013-03-19 00:49:40

标签: java class generics

我有一个可能返回A类或B类的方法。如何将其返回类型定义为泛型,与返回的类类型无关。例如,

public <Generic_Class_Return_Type> showForm() {
   if (true)
      return new ClassA();
   else 
      return new ClassB();
}

4 个答案:

答案 0 :(得分:1)

在这种情况下你不确定是否需要泛型,但是你可以参数化整个类或只是方法然后使用这样的反射:

public <T> T getForm() {
  Class<T> clazz = (Class<T>) ((true) ? Foo.class : Bar.class);
  Constructor<T> ctor = clazz.getConstructor();
  return ctor.newInstance();
}

但是,如果您指定用例,我们可以进一步建议是否采用泛型,或者您是否更好地使用标准多态性。

答案 1 :(得分:0)

你可以使用一个接口,这两个类的实现方式如下:

public SomeInterface showForm() {
   if (true)
      return new ClassA();
   else 
      return new ClassB();
}

class ClassA implements SomeInterface{}
class ClassB implements SomeInterface{}

答案 2 :(得分:0)

public object showForm()
{
   if (true)
      return new ClassA();
   else
      return new ClassB(); 
}

public superClassName showForm()
{
   if (true)
      return new ClassA();
   else
      return new ClassB();
}

答案 3 :(得分:0)

最简单的方法是将它们作为对象返回。

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 { }

<强>泛型

如果你想使用泛型,那么ClassAClassB需要是同一个类,由一些泛型类型修改,例如。 Class<T>。泛型是否相关取决于您的类的实现。你可能最好选择接口或基类。