Java 方法重载尝试导致名称冲突错误。不使用泛型

Java 方法重载尝试导致名称冲突错误。不使用泛型,java,generics,arraylist,overloading,Java,Generics,Arraylist,Overloading,我有以下代码 public class myClass { public static void myMethod( ArrayList<ArrayList<Integer>> src, ArrayList<ArrayList<Integer>> dest, Integer[] selectedIndices) { } public static

我有以下代码

public class myClass {

    public static void myMethod(
            ArrayList<ArrayList<Integer>> src,
            ArrayList<ArrayList<Integer>> dest,
            Integer[] selectedIndices) {

    }

    public static void myMethod(
            ArrayList<ArrayList<Double>> src,
            ArrayList<ArrayList<Double>> dest,
            Integer[] selectedIndices) {

    }
}
公共类myClass{
公共静态法(

ArrayList,但我没有使用泛型。所以我的方法没有经过检查。有人能解释一下我遗漏了什么吗?

当您执行此
ArrayList时

  • Integer
    信息将丢失,即所有通用信息将丢失
  • ArrayList


    您可以将
    ArrayList
    ArrayList
    传递给它。

    执行此
    ArrayList时

    • Integer
      信息将丢失,即所有通用信息将丢失
    • ArrayList


      您可以将
      ArrayList
      ArrayList
      传递给它。

      这里缺少一个要点。您仍然在代码中使用泛型。

      考虑这两个问题

    • ArrayList问题


      编辑

      看看这个
      ArrayList
      class
      (通常位于C:\Program Files\Java\jdk1.7.0\U 45\src.zip\Java\util\ArrayList.Java)

      公共类ArrayList扩展了AbstractList
      实现列表、随机访问、可克隆、java.io.Serializable
      {
      ...
      ...
      
      public ArrayList(Collection您在这里遗漏了一个要点。您仍然在代码中使用泛型。

      考虑这两个问题

    • ArrayList问题


      编辑

      看看这个
      ArrayList
      class
      (通常位于C:\Program Files\Java\jdk1.7.0\U 45\src.zip\Java\util\ArrayList.Java)

      公共类ArrayList扩展了AbstractList
      实现列表、随机访问、可克隆、java.io.Serializable
      {
      ...
      ...
      
      public ArrayList(Collection您肯定在使用泛型,并且正在进行类型擦除

      import java.util.ArrayList;
      
      public class Test {
      
          public static <T> void myMethod(
              ArrayList<ArrayList<T>> src,
              ArrayList<ArrayList<T>> dest,
              Integer[] selectedIndices) {
      
          }
      }
      
      import java.util.ArrayList;
      公开课考试{
      公共静态法(
      ArrayList src,
      ArrayList dest,
      整数[]已选整数(个){
      }
      }
      
      EDIT1: 在注释中回答您的问题。它从传入的参数派生类型。下面是一个如何使用它的示例。我还添加了一行,这将导致编译器失败,因为它们的参数类型不匹配

      import java.math.BigDecimal;
      import java.util.ArrayList;
      
      public class Test {
          public static <T> void myMethod(
              ArrayList<ArrayList<T>> src,
              ArrayList<ArrayList<T>> dest,
              Integer[] selectedIndices) {}
      
          public static void main(String[] args) {
              ArrayList<ArrayList<Integer>> srcInteger = null;
              ArrayList<ArrayList<BigDecimal>> srcBigDecimal = null;
              Integer[] indexes = null;
      
              myMethod(srcInteger, srcInteger, indexes);
              myMethod(srcBigDecimal, srcBigDecimal, indexes);
              myMethod(srcInteger, srcBigDecimal, indexes); // <- this will not compile
          }
      }
      
      import java.math.BigDecimal;
      导入java.util.ArrayList;
      公开课考试{
      公共静态法(
      ArrayList src,
      ArrayList dest,
      整数[]selectedDices){}
      公共静态void main(字符串[]args){
      ArrayList srcInteger=null;
      ArrayList srcBigDecimal=null;
      整数[]索引=null;
      myMethod(srcInteger、srcInteger、索引);
      myMethod(srcBigDecimal、srcBigDecimal、索引);
      
      myMethod(srcInteger、srcBigDecimal、index);//您肯定在使用泛型,并且正在进行类型擦除

      import java.util.ArrayList;
      
      public class Test {
      
          public static <T> void myMethod(
              ArrayList<ArrayList<T>> src,
              ArrayList<ArrayList<T>> dest,
              Integer[] selectedIndices) {
      
          }
      }
      
      import java.util.ArrayList;
      公开课考试{
      公共静态法(
      ArrayList src,
      ArrayList dest,
      整数[]已选整数(个){
      }
      }
      
      EDIT1: 在注释中回答您的问题。它从传入的参数派生类型。下面是一个如何使用它的示例。我还添加了一行,这将导致编译器失败,因为它们的参数类型不匹配

      import java.math.BigDecimal;
      import java.util.ArrayList;
      
      public class Test {
          public static <T> void myMethod(
              ArrayList<ArrayList<T>> src,
              ArrayList<ArrayList<T>> dest,
              Integer[] selectedIndices) {}
      
          public static void main(String[] args) {
              ArrayList<ArrayList<Integer>> srcInteger = null;
              ArrayList<ArrayList<BigDecimal>> srcBigDecimal = null;
              Integer[] indexes = null;
      
              myMethod(srcInteger, srcInteger, indexes);
              myMethod(srcBigDecimal, srcBigDecimal, indexes);
              myMethod(srcInteger, srcBigDecimal, indexes); // <- this will not compile
          }
      }
      
      import java.math.BigDecimal;
      导入java.util.ArrayList;
      公开课考试{
      公共静态法(
      ArrayList src,
      ArrayList dest,
      整数[]selectedDices){}
      公共静态void main(字符串[]args){
      ArrayList srcInteger=null;
      ArrayList srcBigDecimal=null;
      整数[]索引=null;
      myMethod(srcInteger、srcInteger、索引);
      myMethod(srcBigDecimal、srcBigDecimal、索引);
      
      myMethod(srcInteger、srcBigDecimal、indexes);//你说“我没有使用泛型”是什么意思?@PeterRader我的意思是,我的方法签名中没有类似的内容。是和的占位符。你正在使用泛型。他认为是泛型,但不是。这只是在注释中解决了一个困惑。是的,通过查看注释外部和字符串/字符序列外部!最小的泛型运算符是菱形运算符
      。你说“我不使用泛型”是什么意思?@PeterRader我的意思是,我的方法签名中没有类似的内容。是和的占位符。你正在使用泛型。他认为是泛型,但不是。这只是在注释中解决了一个困惑。是的,通过查看注释外部和字符串/字符序列外部!最小的泛型运算符是菱形运算符
      。谢谢。可能是我对泛型的基础知识很薄弱。但是我没有准确地指定函数可以期望的内容。例如ArrayList和Integer。这些可以被视为泛型吗?java如何通过查看来决定什么是泛型,什么不是泛型?因此,java编译器将和视为一些?如果使用<>(角括号)这意味着您直接或间接地使用泛型。在这种情况下,您使用的是预定义的泛型列表,即ArrayList,它支持使用泛型的每个数据类型(泛型数据类型)。谢谢。可能是我的泛型基础薄弱。但我没有确切说明函数可以期望什么。例如ArrayList和Integer。这些可以被视为泛型吗?java如何决定什么是泛型,什么不是泛型?通过查看?因此,java编译器将和视为一些?如果使用<>(角括号)这意味着您直接或间接地使用泛型。在这种情况下,您使用的是预定义的泛型列表,即ArrayList,它支持使用泛型的每个数据类型(泛型数据类型).java是如何决定什么是泛型,什么不是泛型的?通过查看?因此,java编译器在这里看到了一些?@Abhinav看到了
      数组的实际结构
      
      import java.math.BigDecimal;
      import java.util.ArrayList;
      
      public class Test {
          public static <T> void myMethod(
              ArrayList<ArrayList<T>> src,
              ArrayList<ArrayList<T>> dest,
              Integer[] selectedIndices) {}
      
          public static void main(String[] args) {
              ArrayList<ArrayList<Integer>> srcInteger = null;
              ArrayList<ArrayList<BigDecimal>> srcBigDecimal = null;
              Integer[] indexes = null;
      
              myMethod(srcInteger, srcInteger, indexes);
              myMethod(srcBigDecimal, srcBigDecimal, indexes);
              myMethod(srcInteger, srcBigDecimal, indexes); // <- this will not compile
          }
      }