如何在没有警告的情况下将通用工厂用于通用类型?

时间:2011-03-13 12:58:30

标签: java generics factory

我有像

这样的工厂方法
public static <T> Something<T> create(Class<T> clazz) {
    return new Something<T>(clazz);
}

采用Class参数。我在

中使用它时
Something<String> something1 = Something.create(String.class);
一切都很好。但是对于

Something<List> something2 = Something.create(List.class);

我得到一个警告,我无法摆脱。无论我尝试什么,我都会收到警告或错误。

@SuppressWarnings("unchecked")之外我还能做些什么吗?

实际上,我想得到

Something<List<?>> something2 = Something.create(List.class);
如果没有两个演员和一个警告,我无法得到。我正在使用eclipse 3.5.2。

2 个答案:

答案 0 :(得分:0)

一种方法是为方法提供您想要用于泛型参数的类的虚拟实例。 E.g:

public static <T> List<T> asList(T a) {
   return new ArrayList<T>();
}

答案 1 :(得分:0)

@SuppressWarnings("unchecked")
static public <A, B extends A> Class<B> rawcast(Class<A> clazz)
{ 
    return (Class<B>)clazz; 
}

void test()
{
    Class<List<?>> clazz = rawcast(List.class);

    Something<List<?>> something2 = Something.create(clazz);
}