Java名字冲突,如何用模板类改写程序

标签 java

我正在编写一个代码,其中包含以下几行:

 public static int[] toArray(List<Integer> list) {
   int[] array = new int[list.size()];
   for(int i = 0; i < array.length; i++)
     array[i] = list.get(i);
   return array;
 }
 public static double[] toArray(List<Double> list) {
   double[] array = new double[list.size()];
   for(int i = 0; i < array.length; i++)
     array[i] = list.get(i);
   return array;
 }
 public static String[] toArray(List<String> list) {
   String[] data = new String[list.size()];
   for(int i = 0; i < data.length; i++)
     data[i] = list.get(i);
   return data;

编译时出现以下错误:

error: name clash: toArray(List<Double>) and toArray(List<Integer>) have the same erasure
 public static double[] toArray(List<Double> list) {
                        ^
error: name clash: toArray(List<String>) and toArray(List<Integer>) have the same erasure
 public static String[] toArray(List<String> list) {
                        ^
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
2 errors

这个程序是我最近下载的一个开源程序(有点旧,2006)。在包中我可以找到二进制版本和源代码。说明这段代码已经编译正确,但是现在我编译不了。

现在我有两个问题:

  1. 这种重载有什么问题?
  2. 我该如何解决这个问题?我可以只用基于模板的函数替换这些函数吗?如果是,怎么做?

谢谢

最佳答案

使方法通用:

 public static T[] toArray(List<T> list) {
   T[] data = new T[list.size()];
   for(int i = 0; i < data.length; i++)
     data[i] = list.get(i);
   return data;

可能在语法上不正确,自从我编写 java 以来有一段时间了 :) 解决方案应该成立

关于Java名字冲突,如何用模板类改写程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17359409/

相关文章:

java - POI Java Excel解决方案——缩进值

java - 从 .accdb 文件获取数据

java - 这里有多少个线程?

java - 使用其他类的字段动态创建类

java - java中使用jsoup提取数据

java - 检查矩形列表中哪个矩形被单击的最快方法

Java程序不显示输出

java - jSTL 不适用于 activiti 7 - 冲突库

java - 在 Java 项目上激活 Spartan Refactoring 插件

java - 是否可以将 jUnit 测试配置为仅在在线时运行?