2010-07-30 122 views
0

我已经使用Arrays.asList几十次,如果没有数百次没有问题。突然之前编译代码在从6.8切换到NetBeans 6.9后无法编译。这里有几条问题:Arrays.asList编译问题

Node n = new NickNode(4,5); 
Node m = new NonLocatableNode(); 
Node subclass = new NickSubclassNode(); 

List<Node> nodes = Arrays.asList(n,m,subclass); 

节点的子类并不重要;他们编译得很好。给我一个错误的行是Arrays.asList行。我得到的错误

alt text http://grab.by/grabs/b553ffb898ca0874ef4741b8c87fc576.png

我不知道它是越来越约HelpCtx.Provider [] ...有谁看到什么毛病这个片段什么?

更换asList符合

List<Node> theNodes = new LinkedList<Node>(); 
theNodes.add(n); 
theNodes.add(m); 
theNodes.add(subclass); 

工作正常。但我更喜欢Arrays.asList的更短的语法

+0

它工作正常,我.. – Bozho 2010-07-30 13:03:44

+0

较短的解决方法可能会被绕过可变参数:'theNodes = Arrays.asList(新节点[] {N, m,subclass});' – 2010-07-30 14:50:43

回答

4

试一下这个

List<Node> nodes = Arrays.<Node>asList(n,m,subclass);  
+0

工作。我偶然发现了过去的这种语法(这真是太离奇了),但是从来没有*必须在Arrays.asList声明的上下文中使用它。通常类型推理工作正常。 – I82Much 2010-07-30 14:53:14

2

您的错误图形不显示给我,但它看起来像一个泛型的问题。当你从netbeans 6.8迁移到6.9时,编译器警告是否可能转换为编译器错误?

尝试宣告你的列表,...

List<? extends Node> nodes = Arrays.asList(n, m, subclass); 

通配符语法指定列表中包含节点和任何继承自Node。

+0

没有解决问题 - 得到完全相同的错误。 – I82Much 2010-07-30 14:17:54

-1

它应该是:

List<? extends Node> nodes = Arrays.asList(n,m,subclass); 

谨记:

List<Sub Class> is not a sub class for List<Parent Class> 

它们是不同的类。

+0

n,m和子类都被声明为'Node'。运行时类型完全不相关。 – 2010-07-30 14:53:03

+0

@Mark:n,m和子类都声明为节点,但列表不是列表。那是你需要的方式?将Node扩展为泛型类型。 – mhshams 2010-07-30 20:08:48

+0

你是对的,但在这种情况下它并不重要,因为asList将返回一个列表,而不是List 。 – 2010-07-31 06:39:52

2

是的,你说得对,这是已经报道过的NetBeans 6.9中的错误。所以希望它很快就会解决。你可以看到,错误报告here

+0

请发布错误报告的链接。 – 2010-07-30 13:35:00

+0

Rakesh,我发布了bug链接。 – Rupeshit 2010-07-30 13:47:30

+0

请原谅我的无知,但那个错误报告似乎完全不相关。我没有得到空指针异常。 – I82Much 2010-07-30 14:16:25