2015-02-06 53 views
0

我正在创建列表数据结构,并且在实际使用泛型语法时遇到了麻烦。我所要做的就是创建一个ArrayLinearList<String>的实例,并且在其中放入一些字符串。我一直想弄清楚为什么把第一个插槽设置为“one”是不正确的。这是错误和我的代码片段。实例化使用泛型的java数组

myList[0] = "one"; 

错误消息是:错误:不兼容的类型:字符串不能转换到ArrayLinearList<String>

public class ArrayLinearList<E> implements LinearListADT<E> { 


private Object[] array; 
int currentSize = 0; 

//Constructor (no arguments) 
public ArrayLinearList() { 
    currentSize = 2; 
    // array = (ArrayLinearList[]) new Object[2]; //Start with a container of size 2 
    array = new Object[2]; 
} 
    public static void main(String[] var0) { 

     ArrayLinearList<String>[] myList; 
     myList = new ArrayLinearList[2]; 
     myList[0] = "one"; 
    } 
} 

我有相当多的麻烦与在Java中使用泛型的语法。在我看来,我有一个大小为2的数组,我将放置字符串。我将在后面添加更多方法,但我想了解为什么当前的语法对于将此字符串放入数组中不正确。

+0

一般来说,泛型和数组不会混合使用Java。改为使用列表。 – 2015-02-06 17:28:20

+0

@guillermoalvarez,我建议你快速阅读这个清晰的书面教程:http://www.javacodegeeks.com/2011/04/java-generics-quick-tutorial.html – 2015-02-06 17:43:47

+0

@ tgm1024:我会描述编译器错误在“新T []”和“新Foo []”上显示为“不混合”。我完全理解不变泛型和协变数组之间的区别,但试图将泛型和数组合并在一起实际上并不是一个好主意,而使用'List'几乎总是一个更好的选择,不会强制你压制编译器警告或执行不安全的演员。 – 2015-02-06 17:49:06

回答

1

这里:

ArrayLinearList<String>[] myList; 

定义保存ArrayLinearList<String>元素,而不是字符串数组,这就是为什么你会得到错误信息。

+0

感谢编辑,我错过了转义代码。 – szpetip 2015-02-06 14:46:04

1

这里

ArrayLinearList<String>[] myList; 
myList = new ArrayLinearList[2];//you have defining array myList of type ArrayLinearList 
myList[0] = "one";//you are trying to store String to array which can hold ArrayLinearList 

这里ArrayLinearList<String>你的代码,意味着你的名单将举行(只要我们在代码中进行正确定义)String类型的值。但ArrayLinearList<String>[]将仅保存类型ArrayLinearList的引用,而不保留String本身。

0

您需要使用

myList.array[0] = "one"; 

因为myList不是一个数组。这是一个用来存储数组的对象。