java 泛型用于两种以上类型

标签 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 的 Converter 对象的通用列表,这样我就不必拥有 T1 和 T2,而只能拥有一个。

最佳答案

这个问题有点不清楚。

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

对于“两种”具体类型的任意组合,上述签名都可以工作。

如果您想要更多类型,那么您只需增强签名即可。您可以阅读有关元组的内容,以进一步了解这一点。

编辑: 如果我理解正确的话,我解决这个问题的方法是将“Report”定义为一种类型,然后构建我的方法。

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

希望这是您所追求的。我认为如果这是您正在寻找的东西,您应该花一些时间在泛型的边界上。

关于java 泛型用于两种以上类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47747686/

相关文章:

java - 如何从使用反射实现接口(interface)的类的字段中获取值?

java - 线程中出现异常 "main"java.lang.NoClassDefFoundError : when running with console. 可能与 Maven 相关

java - 过滤掉 Log4j2 文件中的 Hibernate 日志

generics - 在Kotlin中,如何使用本地Java参数实例化泛型类?

C#泛型B+树

java - 有没有一种有效的方法来 "crop"一个文件(从尾部删除 x 个字节)?

Java 转义 XML 标记字符串

typescript - 我可以在 Typescript 中使用泛型类型作为对象索引类型吗?

c# - 名称相似的T类型和非T类型方法的执行顺序?

Java 泛型规范