Java Generics用于两种以上类型



我是仿制药的新手,我有一个像下面的方法

public <T1, T2> void test(Details<T1, T2> reportDetails, List<T1> ent1, List<T2> ent2)
Converter<? super T1, Box> conv1
 Converter<? super T2, Box> conv2
converter is of type org.springframework.core.convert.converter

这实际上是用于下载报告,T1是一个报告,T2是另一个报告,我希望它更通用,因此,如果添加更多表,我不必添加新类型我需要T1,T2是动态的,这是我想要一个通用的通用,它将既可以使用T1和T2都可以使用,以便将来我不必添加新的类型(T3)。有办法做到吗?

更清楚:我需要一种可以创建一个可以同时存储T1和T2的转换器对象列表的通用列表,这样我就不必拥有T1和T2,并且只能拥有一个。

问题有点不清楚。

您使用的签名基本上意味着上述方法是通用的,因此它将支持T1和T2的任何两种类型。

对于"两种"混凝土类型的任何组合,上述签名可以起作用。

如果您想要更多类型的类型,则只需增强签名即可。您可以阅读有关元素的信息,以进一步理解这一点。

编辑:如果我正确理解您,那么我解决的方法是将"报告"定义为一种类型,然后建立我的方式。

public interface Report {    
    void getReportData(/*any parameters here */);
}

您定义的方法将成为:

<T1 extends Report, T2 extends Report> void test(Details<T1, T2> reportDetails, List<T1> ent1, List<T2> ent2);

,转换器将全部保存在某个地方的某个地方,例如:

List<Converter<T extends Report, Base>>

希望这是您所追求的。我认为,如果您要寻找的话,您应该花一些时间在仿制药中的范围。

您可以尝试<? extends T><? super T>吗?一个无限的通配符看起来像,基本上是指。这意味着通用可以是任何类型。有限的通配符(或)对类型的限制,说它要么必须扩展特定类型(称为上限),要么必须是特定类型的祖先(称为下限).More Info。

最新更新