当其他类型参数为<t> </t> </t1>时,如何引用第二个类型参数<t1>

时间:2015-01-06 02:00:02

标签: java function generics

我正在尝试使用两个类型参数TT1来实现一个函数。

如果类型参数T是类Feed的实例,我希望T1属于类NewFeed;如果T是类Reward的实例,我希望T1属于类NewReward。因此,TT1之间存在一些固有的映射 - 我该如何表达?

public <T> void onServerSuccessGenericList(){
    ArrayList<T1> myArray = myFunction();       // this line causes problem
    ArrayList<T> myArray2 = somefunction()      // hence I need T as well
}

我尝试了以下操作,但它不起作用:

public <T> void onServerSuccessGenericList(Class t1ClsName){
    ArrayList<t1ClsName> myArray = myFunction();

}

2 个答案:

答案 0 :(得分:0)

试试这个:

public <T, T1> void onServerSuccessGenericList(Class<T> tClsName, Class<T1> t1ClsName){
    ArrayList<T1> myArray = myFunction();
    ArrayList<T> myArray2 = somefunction();
}

用法将是这样的: onServerSuccessGenericList(ClsName.class, ClsName1.class); 至于ClsName.classClass<ClsName>类型

的实例

但是,如果您需要使用参数化类型在函数内部使用两种不同类型,则需要将这两种类型定义为类型参数。并将两者都传递给这个函数。

此外,您的方法签名不正确。参数类型也应定义为泛型。

答案 1 :(得分:0)

您可以为FeedReward类使用通用接口,该类接受相应的NewFeed / NewReward类作为类型参数:

interface NewInterface<T>{}

class Feed implements NewInterface<NewFeed>{}
class NewFeed {}

class Reward implements NewInterface<NewReward>{}
class NewReward {}

然后您可以像这样声明您的方法:

public <T extends NewInterface<T1>, T1> void onServerSuccessGenericList(){
    ArrayList<T1> myArray = myFunction();
    ArrayList<T> myArray2 = somefunction();
}