当另一个类型参数为 <T> 时如何引用第二个类型参数 <T1>
How to refer to a second type parameter <T1> when the other type parameter is <T>
我正在尝试使用两个类型参数 T
和 T1
实现一个函数。
如果类型参数 T
是 class Feed
的实例,我希望 T1
是 class NewFeed
;如果 T
是 class Reward
的一个实例,我希望 T1
是 class NewReward
的一个实例。所以 T
和 T1
之间存在一些固有的映射 - 我该如何表达呢?
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();
}
试试这个:
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.class
是 Class<ClsName>
类型
的实例
但再次重申,如果您需要在具有参数化类型的函数内部使用两种不同的类型,则需要将这两种类型都定义为类型参数。并将两者传递给此函数。
此外,您的方法签名不正确。参数类型也应定义为泛型。
您可以为您的 Feed
和 Reward
class 使用一个通用接口,它接受相应的 NewFeed
/NewReward
class作为类型参数:
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();
}
我正在尝试使用两个类型参数 T
和 T1
实现一个函数。
如果类型参数 T
是 class Feed
的实例,我希望 T1
是 class NewFeed
;如果 T
是 class Reward
的一个实例,我希望 T1
是 class NewReward
的一个实例。所以 T
和 T1
之间存在一些固有的映射 - 我该如何表达呢?
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();
}
试试这个:
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.class
是 Class<ClsName>
类型
但再次重申,如果您需要在具有参数化类型的函数内部使用两种不同的类型,则需要将这两种类型都定义为类型参数。并将两者传递给此函数。
此外,您的方法签名不正确。参数类型也应定义为泛型。
您可以为您的 Feed
和 Reward
class 使用一个通用接口,它接受相应的 NewFeed
/NewReward
class作为类型参数:
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();
}