Java ArrayList类型错误/警告

Java ArrayList类型错误/警告,java,arraylist,incompatibletypeerror,unchecked-conversion,Java,Arraylist,Incompatibletypeerror,Unchecked Conversion,在尝试实现自定义数据类时,我遇到了以下问题。我只是尝试向ArrayList添加项,但Java似乎对我使用的类型有问题。我尝试了多种解决方案,但都没有效果。下面我已经包含了来自我的自定义数据类型的代码,以及来自抛出相同错误的简化版本的代码。我已经包括了我尝试过的两种解决方案以及每次抛出的错误/警告 我对代码比较陌生,尤其是对StackOverflow的问题比较陌生,所以如果我忘记了什么或者可以澄清,请让我知道 自定义数据类型: 1 /** 2 This file defines a tra

在尝试实现自定义数据类时,我遇到了以下问题。我只是尝试向ArrayList添加项,但Java似乎对我使用的类型有问题。我尝试了多种解决方案,但都没有效果。下面我已经包含了来自我的自定义数据类型的代码,以及来自抛出相同错误的简化版本的代码。我已经包括了我尝试过的两种解决方案以及每次抛出的错误/警告

我对代码比较陌生,尤其是对StackOverflow的问题比较陌生,所以如果我忘记了什么或者可以澄清,请让我知道

自定义数据类型:

  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
将不是通用的,是的。