Java 允许字符串对象作为整数的泛型
Java 允许字符串对象作为整数的泛型,java,string,list,generics,integer,Java,String,List,Generics,Integer,List-listofinteger类型为Integer,但接受字符串对象,当我检查Integer的实例时,它给出的是true,太奇怪了,有人能解释发生了什么吗 我所知道的是,当我将List List of Integer发送到方法时,它被赋予了对无类型的List reference变量的引用,当我添加它时,它将输入作为字符串,现在当我将任何事物的List List返回到整数类型的列表时,它应该被引用,因为它是一个引用 现在,我检查实例的,它正在为整数打印真,但它的字符串 import java
List-listofinteger
类型为Integer
,但接受字符串对象,当我检查Integer的实例时,它给出的是true,太奇怪了,有人能解释发生了什么吗
我所知道的是,当我将List List of Integer
发送到方法时,它被赋予了对无类型的List reference变量的引用,当我添加它时,它将输入作为字符串,现在当我将任何事物的List List
返回到整数类型的列表时,它应该被引用,因为它是一个引用
现在,我检查实例的
,它正在为整数
打印真
,但它的字符串
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;
}
}
import java.util.ArrayList;
导入java.util.List;
公共类TestEx{
List listofinteger=new ArrayList();//整型列表
公共静态void main(字符串…参数)
{
TestEx f=新的TestEx();
f、 list of integer.add(123);//通过包装整数来添加整数(自动)
f、 listofinteger=f.addelement(f.listofinteger);
if(f.listofinteger.get(1)instanceof Integer);
{
System.out.println(“true”);//此处打印true
System.out.println(f.listofinteger.get(1));
}
}
列表添加元素(列出所有内容)
{
添加(“asdasdasd”);//添加字符串对象
返回所有内容的列表;
}
}
我知道这里的方法addelement(List List of Anything)
应该给出一个类型整数,但我在这里测试它,以理解泛型的概念首先,正如@VJD所评论的,您有一个语法错误-不需要代码>地址:
if(f.listofinteger.get(1) instanceof Integer);
关于您的问题,泛型是编译时检查类型安全性的工具。在运行时中,没有验证。这就是为什么将字符串添加到整数列表中时不会出错的原因。首先,正如@VJD所评论的,您有一个语法错误-不需要代码>地址:
if(f.listofinteger.get(1) instanceof Integer);
关于您的问题,泛型是编译时检查类型安全性的工具。在运行时中,没有验证。这就是为什么将String
添加到整数列表中时不会出错的原因。您正在将列表作为通用列表传递
您需要将您的列表标识为所有内容的列表。
对于您的代码,如果您添加了字符串,请给出一个错误。。。我将您的addElement
代码更改为:
List<Integer> addelement(List<Integer> listofanything)
{
listofanything.add("asdasdasd"); //Error when adding
return listofanything;
}
List addelement(所有内容的列表)
{
listofanything.add(“asdasdasd”);//添加时出错
返回所有内容的列表;
}
编译时出现了一个错误 您正在将您的列表作为通用列表传递
您需要将您的列表标识为所有内容的列表。
对于您的代码,如果您添加了字符串,请给出一个错误。。。我将您的addElement
代码更改为:
List<Integer> addelement(List<Integer> listofanything)
{
listofanything.add("asdasdasd"); //Error when adding
return listofanything;
}
List addelement(所有内容的列表)
{
listofanything.add(“asdasdasd”);//添加时出错
返回所有内容的列表;
}
编译时出现了一个错误 您的程序打印true
,因为您的代码中存在语法错误,这恰好是合法的,与您的预期含义不同
您的if
语句
if(f.listofinteger.get(1) instanceof Integer);
结尾处的分号结束整个语句,并使其等效于传递空块:
if(f.listofinteger.get(1) instanceof Integer) {
// Do nothing
}
在这之后,您就得到了原本应该是if条件的一部分的块,但现在只是一个匿名块。(您可以在代码中或多或少地添加大括号,以分隔语句以进行范围界定。它们仍然按照标准顺序执行)
将两者结合在一起,您的代码相当于:
if(f.listofinteger.get(1) instanceof Integer) {
// Do nothing
}
System.out.println("true"); //prints true here
System.out.println(f.listofinteger.get(1));
因此,应该清楚的是,无论if
条件是什么,最后两行都将始终执行
正如其他人所指出的,您可以通过删除if语句后的分号来解决这个问题。(由于这是一个令人困惑且难以发现的问题,许多静态分析工具(如)将突出显示这些分号,认为这是一个可能的问题。)由于代码中的语法错误,您的程序将打印true
,这恰好是合法的,与您的预期含义不同
您的if
语句
if(f.listofinteger.get(1) instanceof Integer);
结尾处的分号结束整个语句,并使其等效于传递空块:
if(f.listofinteger.get(1) instanceof Integer) {
// Do nothing
}
在这之后,您就得到了原本应该是if条件的一部分的块,但现在只是一个匿名块。(您可以在代码中或多或少地添加大括号,以分隔语句以进行范围界定。它们仍然按照标准顺序执行)
将两者结合在一起,您的代码相当于:
if(f.listofinteger.get(1) instanceof Integer) {
// Do nothing
}
System.out.println("true"); //prints true here
System.out.println(f.listofinteger.get(1));
因此,应该清楚的是,无论if
条件是什么,最后两行都将始终执行
正如其他人所指出的,您可以通过删除if语句后的分号来解决这个问题。(由于这是一个令人困惑且难以发现的问题,许多静态分析工具(如)将突出显示这些分号作为可能的问题。)if(f.listofinteger.get(1)instanceof Integer)@VJD:这就是代码的问题,你应该把它作为一个答案发布。哦,分号是对的:/@VJD这是一个分号问题,我还有另一个问题,为什么它实际上允许字符串,如果java开发人员认为它会停止向列表中添加任何对象的问题,然后,首先,它们允许某种类型的列表引用简单类型的list@anshulkatta好的,您并没有将它添加到整数列表中,而是添加到一个列表中,它允许您添加它,尝试将所有内容的列表从一个列表更改为另一个列表,并选中if(f.listofinger.get(1)instanceof Integer)@VJD:这就是代码的问题所在,你应该把它作为答案发布。哦,分号是t