List listofinteger
的类型为 Integer
,但接受 String 对象,当我检查 Integer 实例
时,它给出 true ,太奇怪了,谁能解释一下发生了什么。
我所知道的是,当我将 List listofinteger
发送到方法时,它被赋予对无类型的 List 引用变量的引用,当我添加时,它将输入作为 String ,现在当我返回List listofanything
到 List of Integer type
,它应该采用,因为它是一个引用。
现在,但我检查 instanceof
,它正在为 Integer
打印 true
,但它的 String
。
import java.util.ArrayList;
import java.util.List;
public class TestEx {
List<Integer> listofinteger=new ArrayList<Integer>(); //list of integer type
public static void main(String... args)
{
TestEx f=new TestEx();
f.listofinteger.add(123); //adds integer by wrapping it(auto)
f.listofinteger=f.addelement(f.listofinteger);
if(f.listofinteger.get(1) instanceof Integer);
{
System.out.println("true"); //prints true here
System.out.println(f.listofinteger.get(1));
}
}
List<Integer> addelement(List listofanything)
{
listofanything.add("asdasdasd"); //adding String object
return listofanything;
}
}
我知道这里的方法 addelement(List listofanything )
应该给出一个 Integer 类型,但我在这里测试它,以理解泛型的概念
最佳答案
首先,正如 @VJD 评论的那样,您有一个语法错误 - 不需要 ;
位于:
if(f.listofinteger.get(1) instanceof Integer);
关于你的问题,泛型是检查类型安全的编译时工具。在运行时没有验证,从 type erasure 开始。这就是为什么将 String
添加到 Integers
列表时不会出现错误..
关于java - 通用允许字符串对象作为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16892050/