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