我是仿制药的新手,我有一个像下面的方法
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。