Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我如何摆脱这个警告?_Java_Warnings - Fatal编程技术网

Java 我如何摆脱这个警告?

Java 我如何摆脱这个警告?,java,warnings,Java,Warnings,我从Java代码中得到以下警告: Lexer.java:591: warning: [unchecked] unchecked conversion found : java.util.ArrayList required: java.util.ArrayList<java.lang.Integer> ArrayList<Integer> tempArray = temp.get(theToken); Lexer.java:591:警告:[未选中]未选中的转换 找到

我从Java代码中得到以下警告:

Lexer.java:591: warning: [unchecked] unchecked conversion
found   : java.util.ArrayList
required: java.util.ArrayList<java.lang.Integer>
ArrayList<Integer> tempArray = temp.get(theToken);
Lexer.java:591:警告:[未选中]未选中的转换
找到:java.util.ArrayList
必需:java.util.ArrayList
ArrayList tempArray=temp.get(token);
我试着把它投给ArrayList,但这没关系,它仍然出现


如何消除此问题?

get
的调用返回原始(非泛型)
ArrayList

没有提供足够的上下文来建议最佳方法。可以修改
get
方法,将其返回类型声明为
列表
。如果
temp
是一个
Map
,请使用适当的泛型类型参数来引用它:
Map
。或者,如果无法修改返回类型,则可以将结果分配给
列表
,并在使用时将其内容强制转换为
整数


请注意,我建议使用
List
而不是
ArrayList
。一般来说,使用抽象类型而不是碰巧使用的实现类的API可以确保将来的灵活性。

这通常是因为临时对象中get()方法的返回类型返回ArrayList而不使用泛型规范,而tempArray是整数的ArrayList。在运行时分配给tempArray的ArrayList可能包含非整数的对象。在编译时,Java无法确定get()返回的ArrayList中的对象类型。

ArrayList是Java集合,可以保存任何类型的对象。temp的get方法可能被声明为返回一个普通的ArrayList,但您指定的TEMPARRARY是一个只包含整数的ArrayList

如果为temp编写了类,那么需要声明get方法以返回
ArrayList

如果您没有,那么您将不得不使tempArray成为一个普通的ArrayList,而不包含整数的泛型类型

有关Java中泛型类型的更多信息,请参阅


需要注意的是,java中的泛型类型检查仅在编译时进行,它在运行时不存在(所谓的类型擦除)。

看起来您缺少对temp变量的泛型声明。我将假设temp是一个映射(基于它有一个get方法的事实)。如果是这种情况,那么您可能没有完全声明这个映射的泛型类型。如果“theToken”的类型是String,则映射似乎是String和ArrayList之间的映射。因此,它的声明应该如下所示:

Map<String, ArrayList<Integer>> temp = new HashMap<String, ArrayList<Integer>>();
Map<String, List<Integer>> temp = new HashMap<String, List<Integer>>();
Map temp=newhashmap();
要稍微改进您的stile,您可以通过将这两行更改为如下所示,从引用特定类型“ArrayList”切换到接口列表:

Map<String, ArrayList<Integer>> temp = new HashMap<String, ArrayList<Integer>>();
Map<String, List<Integer>> temp = new HashMap<String, List<Integer>>();
Map temp=newhashmap();

这样做的目的是使您可以从一种列表(如ArrayList)更改为另一种列表(如Vector或LinkedList),而无需更改使用它们的任何代码。

您能否提供更多的代码,如temp。