我们如何将T <s>描述为在java </s>中使用泛型的方法的返回类型

时间:2013-05-13 16:12:27

标签: java generics

我们如何将T<S>描述为方法的返回类型

<T,S> T<S> getResult(Class<T> tClass, Class<S> sClass)

2 个答案:

答案 0 :(得分:9)

基本上,你不能。没有办法描述“带有一个类型参数的泛型类型”并像这样使用它。

答案 1 :(得分:4)

乔恩是对的,因为在一般情况下你不能这样做。但是,如果我们考虑更具体的情况,比如返回特定类型元素的特定类型List,我们可以这样做:

<T, L extends List<T>> L getResult(Class<T> tClass, Class<L> lClass)

但接下来就是调用它的问题。类仅按原始类型进行参数化。所以,如果我们想这样称呼它:

ArrayList<String> result = getResult(String.class, ArrayList.class);

它不起作用,因为ArrayList.class的类型为Class<ArrayList>,而不是Class<ArrayList<String>>

但是我们可以使用super type token模式,Guava使用TypeToken类非常容易:

<T, L extends List<T>> L getResult(Class<T> tClass, TypeToken<L> lType) {
   // use lType.getRawType()...
}

ArrayList<String> result = 
    getResult(String.class, new TypeToken<ArrayList<String>>(){});

当然,如果L代表一个具体的类,这只会有用。也可以使用类型参数创建TypeToken,这在运行时无法帮助您。