我是泛型的新手,我有一个类似下面的方法
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)。有没有办法做到这一点?
更清楚: 我需要一种方法,我可以创建一个通用的Converter对象列表,它可以存储T1和T2,这样我就不必拥有T1和T2,我只能拥有一个。
答案 0 :(得分:2)
问题有点不清楚。
您使用的签名基本上意味着上述方法是通用的,因此它将支持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>>
希望这是你所追求的。如果这是你想要的,我认为你应该花一些时间在仿制药的界限上。
答案 1 :(得分:0)
你可以试试<? extends T>
和<? super T>
吗?一个无界的通配符看起来像,基本上意味着。这意味着通用可以是任何类型。有界通配符(或)通过声明它必须扩展特定类型(称为上限)或必须是特定类型的祖先(称为下限)对类型施加限制。More info