java - 通用允许字符串对象作为整数

标签 java string list generics integer

List listofinteger 的类型为 Integer ,但接受 String 对象,当我检查 Integer 实例 时,它给出 true ,太奇怪了,谁能解释一下发生了什么。

我所知道的是,当我将 List listofinteger 发送到方法时,它被赋予对无类型的 List 引用变量的引用,当我添加时,它将输入作为 String ,现在当我返回List listofanythingList 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/

相关文章:

python - 如何在一个字符串中一次替换两个东西?

c - 返回指向子数组的指针

java - 为什么 MediaPlayer 没有准备好?

java - 如何在 Web 应用程序中将此 .java 文件作为单独的 Java 应用程序运行以测试它?

java - 将用户添加到 session 并使用 spring 将其获取到实体中

java - 字符串格式参数在 android 上的 string.xml 中不起作用

python - 如何生成扁平列表列表的所有排列?

python - Python List Reverse 的时间复杂度是多少?

python - 如何获取与某个单词相关的数字并打印该单词的次数?

java - Dphibernate。代理初始化为 false