2016-10-06 136 views
0

的一个实例我有一个泛型类,如下所示:单一的方法返回不同的泛型类型的类

MyClass<T> 
{ 
    .... 
} 

现在,我想创建一个通用的方法是什么,比方说public MyClass<T> getMyClassInstance(Type t){...},其中我传递了一个类型,并且此方法给出了该类型的MyClass的实例。


请参阅以下示例。

  1. 如果我把这个方法如下,getMyClassInstance(Integer_type),则返回MyClass<Integer>实例。

  2. 同样,如果我将这个方法调用如下getMyClassInstance(String_type),那么它将返回MyClass<String>实例。

我该怎么写这种方法?如果无法完成,是否有其他方法或更好的方法来做这样的事情?

+0

你不想为此使用构造函数吗?如果是这样,是因为你想要单身还是其他? – Zircon

+0

什么是'String_type'和'Integer_type'?他们是'String.class'和'Integer.class'还是别的? – khelwood

+1

这真的不清楚。你有什么?你想要什么?什么是'Type'和'Integer_type'? – Tunaki

回答

1

对于这种简单的应用,您甚至不需要传递TypeClass参数。考虑以下几点:

public <T> List<T> getList() { 
    return new ArrayList<>(); 
} 

要使用这个很简单,只要:

List<Integer> lst = getList(); 

编译器会推断出所需的列表类型。

请注意,通过传递参数Type可以获得更大的灵活性,特别是在您事先不知道您想要返回什么种类List的情况下。但是这种语法,恕我直言,阅读更自然,可能适合你想要做的。 (我说“可能”,因为你没有提供大量的细节......)

+0

谢谢你的解释。重新审查后,我同意这种方法确实更适合我的具体情况。 – greenPadawan

0

Type类必须携带类型参数就可以了:Type<T>,所以你可以声明

<T> MyClass<T> getMyClassInstance(Type<T> t); 

如果你不能做到这一点,那么编译器是盲目的。