Java ArrayList类型错误/警告
在尝试实现自定义数据类时,我遇到了以下问题。我只是尝试向ArrayList添加项,但Java似乎对我使用的类型有问题。我尝试了多种解决方案,但都没有效果。下面我已经包含了来自我的自定义数据类型的代码,以及来自抛出相同错误的简化版本的代码。我已经包括了我尝试过的两种解决方案以及每次抛出的错误/警告 我对代码比较陌生,尤其是对StackOverflow的问题比较陌生,所以如果我忘记了什么或者可以澄清,请让我知道 自定义数据类型:Java ArrayList类型错误/警告,java,arraylist,incompatibletypeerror,unchecked-conversion,Java,Arraylist,Incompatibletypeerror,Unchecked Conversion,在尝试实现自定义数据类时,我遇到了以下问题。我只是尝试向ArrayList添加项,但Java似乎对我使用的类型有问题。我尝试了多种解决方案,但都没有效果。下面我已经包含了来自我的自定义数据类型的代码,以及来自抛出相同错误的简化版本的代码。我已经包括了我尝试过的两种解决方案以及每次抛出的错误/警告 我对代码比较陌生,尤其是对StackOverflow的问题比较陌生,所以如果我忘记了什么或者可以澄清,请让我知道 自定义数据类型: 1 /** 2 This file defines a tra
1 /**
2 This file defines a transition function data type
3 */
4
5 import java.util.ArrayList;
6
7 public class transition<X,Y,Z> {
8 private ArrayList<Integer> current;
9 private char scan;
10 private ArrayList<Integer> future;
11
12 //constructors
13 public transition(int x, char y, int z) {
14 this.current = new ArrayList<Integer>();
15 this.current.add(x);
16 this.scan = y;
17 this.future = new ArrayList<Integer>();
18 this.future.add(z);
19 }
20
21 public transition(ArrayList<Integer> x, char y, ArrayList<Integer> z) {
22 this.current = new ArrayList<Integer>();
23 this.current = x;
24 this.scan = y;
25 this.future = new ArrayList<Integer>();
26 this.future = z;
27 }
28
29 //methods
30 public ArrayList<Integer> getCurrent() {
31 return this.current;
32 }
33
34 public char getScan() {
35 return this.scan;
36 }
37
38 public ArrayList<Integer> getFuture() {
39 return this.future;
40 }
41 }
1/**
2该文件定义了转换函数数据类型
3 */
4.
5导入java.util.ArrayList;
6.
7公共阶级转型{
8私有阵列列表当前;
9私人字符扫描;
10私人ArrayList未来;
11
12//构造函数
13公共转换(整数x,字符y,整数z){
14 this.current=新的ArrayList();
15本条当前添加(x);
16这个扫描=y;
17 this.future=new ArrayList();
18.本未来。添加(z);
19 }
20
21公共转换(ArrayList x、char y、ArrayList z){
22 this.current=new ArrayList();
23.电流=x;
24.scan=y;
25 this.future=new ArrayList();
26这个未来=z;
27 }
28
29//方法
30公共阵列列表getCurrent(){
31.返回当前值;
32 }
33
34公共字符getScan(){
35.返回此文件。扫描;
36 }
37
38公共阵列列表getFuture(){
39.归还这个未来;
40 }
41 }
简化代码:
1 /**
2 Class designed to test out a bug encountered in my code
3 */
4
5 import java.util.ArrayList;
6
7 public class test {
8
9 public static void main(String[] args) {
10
11 //creating ArrayList and adding one transition to it
12 ArrayList<transition> list = new ArrayList<transition>();
13 transition trans = new transition(1, 'a', 2);
14 list.add(trans);
15
16 //creating list to add to
17 ArrayList<Integer> ints = new ArrayList<Integer>();
18
19 //testing loops over ArrayList and calls to trans
20 for(transition t : list) {
21
22 if(t.getCurrent().contains(1) && t.getScan() == 'a') {
23
24 //Option 1
25 ints.addAll(t.getFuture()); //t.java:24 warning: [unchecked] unchecked conversion
26 //found : java.util.ArrayList
27 //required : java.util.Collection<? extends java.lang.Integer>
28
29 //Option 2
30 for(Integer j : t.getFuture()) { // t.java:26: incompatible types
31 ints.add(j); // found : java.lang.Object
32 } // required : java.lang.Integer
33 }
34 }
35 }
36 }
1/**
2类,用于测试代码中遇到的错误
3 */
4.
5导入java.util.ArrayList;
6.
7公开课考试{
8.
9公共静态void main(字符串[]args){
10
11//创建ArrayList并向其中添加一个转换
12 ArrayList=新建ArrayList();
13转换转换=新转换(1,'a',2);
14.添加列表(trans);
15
16//创建要添加到的列表
17 ArrayList ints=新的ArrayList();
18
19//测试ArrayList上的循环和对trans的调用
20用于(过渡t:列表){
21
22如果(t.getCurrent()包含(1)和&t.getScan()='a'){
23
24//备选方案1
25 ints.addAll(t.getFuture());//t.java:24警告:[未选中]未选中的转换
26//found:java.util.ArrayList
27//required:java.util.Collection这是因为transition
是一个泛型类(它有3个类型参数
)
由于t
是一个原始的transition
(例如与transition
相反),因此transition
中的所有泛型类型信息对于变量t
被完全忽略(是的,原始类型就是这样工作的)
因此,就好像getFuture
只返回一个ArrayList
,而不是ArrayList
只要去掉
(我看不出它们为什么会在那里),它应该会起作用
此问题的一个简单示例如下:
public class Main<T> {
public static void main(String[] args) {
int a = new Main().getList().get(0); // Doesn't compile
}
List<Integer> getList() { return Arrays.asList(1, 2, 3); }
}
公共类主{
公共静态void main(字符串[]args){
int a=new Main().getList().get(0);//未编译
}
List getList(){返回数组.asList(1,2,3);}
}
这不会编译,但如果你删除
,它会编译。什么错误/警告消息?请发布完整的未桥接消息。哪里--哪行代码是有问题的代码?请去掉行号--它们肯定不会有帮助,也会分散注意力。请注意答案。完全解决了问题。非常感谢。o/To进一步了解,如果我分别用特定类型(如ArrayList、char和ArrayList)替换X、Y和Z,那么这将正确编译,因为transition不再是泛型类型,对吗?像char
这样的基本类型不能是泛型类型。您必须改用Character
。听起来您想要to使用通用接口。public interface Transition
使用Y getScan();
等方法。然后您需要一个具体的实现,如public MyTransition implements Transition{code就像前面的}
。如果这样做,MyTransition
将不是通用的,是的。