2011-05-15 91 views
2

一个通用的接口这是新对象的数组如何我试图做到这一点:我怎么做是在Java中实现

interface a{} 
class b implements a{ 
    a[] array; 
    new b(){ 
     array={ new aImplementer(), new aImplementer(), new aImplementer()}; 
    } 
} 

为什么我不能这样做呢?我只是做错了吗?现在我得到的错误是在表达式错误的非法开始在{数组的一部分= {

回答

8

你的语法是关闭的。我相信你想是这样的(最后修订 - 实际测试这一次 - 然后我的变化后覆盖重做)

interface A{} 

class AImplementer implements A{}; 

class B { 
    A[] array; 
    B(){ 
     array=new A[]{ new AImplementer(), new AImplementer(), new AImplementer()}; 
    } 
} 

在那里,保证编译或两次,你的钱回来:)

还免费提供“课程应以大写字母开头”。

+0

这给我一个预期的错误,在新的 – David 2011-05-15 02:19:01

+0

是因为你没有定义一个实现?在那里,我想我把你想要的。那对你有用吗? – 2011-05-15 02:22:30

+0

另请注意,如果你真的打算使用b作为“aImplementer”,那么你的逻辑也是错误的,因为b会在构造函数中递归并创建b,直到内存不足。 – 2011-05-15 02:33:12

1

您只能分配一个数组到一个数组文字(我不知道你称为这些野兽)在变量的声明。所以这可能是好的

// array literal assigned at variable declaration 
a[] array = { new aImplementer(), new aImplementer(), new aImplementer()}; 
new b(){ 

} 

但是你有什么地方,你首先声明它,然后在不同的地点分配它是不行的。为什么?我不确定除了这是如何在JLS中。

编辑:更新编译/测试代码:

interface A { 
} 

class AImplementer implements A { 
}; 

class B { 
    A[] array = {new AImplementer(), new AImplementer(), new AImplementer()}; 

    B() { 

    } 
} 
+0

我认为你仍然需要第二个“新”,如:a [] array = new a [] {blah}(但不是我低估了你 - 这是一些飞行)。 – 2011-05-15 02:15:59

+0

@ Bill:不,代码编译没有新的很好。自己尝试一下,以确保。只有在不声明时启动数组,才需要新的a []。我们的任何代码都可以工作。 +1为你的伟大榜样。 /皮特 – 2011-05-15 02:39:41

+1

@比尔K +1更好的代码。顺便说一句:这些代码都能很好地编译'String [] str1 = {“”,“”,“”}; \t \t \t \t String [] str2 = new String [] {“”,“”,“”};'@Hovercraft Full Of Eels +1首先给出'相同'的答案并被低估,为什么地狱知道? – Boro 2011-05-15 02:41:36