gpt4 book ai didi

java - 如何在java中使用不同的泛型构造构造函数

转载 作者:搜寻专家 更新时间:2023-10-31 19:55:40 25 4
gpt4 key购买 nike

我有一个类,下面是它的构造函数

public Data(ArrayList<String> row){
}

public Data(ArrayList<Integer> row){
}

以上是给我一个错误说:

Method Data(ArrayListList) has the same erasure Data(ArrayList)as another method in type Data.

I even tried doing :

public Data(ArrayList<?> rows) {

if (rows.get(0) instanceof String) {

initializeData(rows);

}

}

但在上面,我必须将整个 ArrayList 转换为 ArrayList。我认为这是低效的。

我正在尝试使用 ArrayList 或 ArrayList(用户可以选择)实例化一个类。


Data = new Data( new ArrayList< String >() );



Data = new Data( new ArrayLIst< Integer >() );
所以以上两个都应该工作。根据传递的输入参数的类型,类将调用不同的方法。

有没有更好的实现我想要的?

提前谢谢你。

最佳答案

泛型是通过删除在 Java 中实现的。这意味着泛型类型信息仅在编译时存在,编译器独自负责确保使用泛型时的类型安全。当您的程序运行时,泛型类型信息根本不存在。

运行时类字面量

List<String>

为了

List<Integer>

都是 List.class

这就是为什么编译器不允许您为仅在通用类型参数方面不同的集合提供重载构造函数。从运行时环境的角度来看,这两种参数类型是相同的。

作为解决方法,您可以将每个通用 ArrayList 类型包装在其自己独特的帮助器类中。这将允许您提供重载的构造函数,这些构造函数将每个帮助程序类作为它们的参数。

关于java - 如何在java中使用不同的泛型构造构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19851585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com