java泛型有两种以上的类型

时间:2017-12-11 06:45:34

标签: 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)。有没有办法做到这一点?

更清楚: 我需要一种方法,我可以创建一个通用的Converter对象列表,它可以存储T1和T2,这样我就不必拥有T1和T2,我只能拥有一个。

2 个答案:

答案 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