一个通用的接口这是新对象的数组如何我试图做到这一点:我怎么做是在Java中实现
interface a{}
class b implements a{
a[] array;
new b(){
array={ new aImplementer(), new aImplementer(), new aImplementer()};
}
}
为什么我不能这样做呢?我只是做错了吗?现在我得到的错误是在表达式错误的非法开始在{数组的一部分= {
一个通用的接口这是新对象的数组如何我试图做到这一点:我怎么做是在Java中实现
interface a{}
class b implements a{
a[] array;
new b(){
array={ new aImplementer(), new aImplementer(), new aImplementer()};
}
}
为什么我不能这样做呢?我只是做错了吗?现在我得到的错误是在表达式错误的非法开始在{数组的一部分= {
你的语法是关闭的。我相信你想是这样的(最后修订 - 实际测试这一次 - 然后我的变化后覆盖重做)
interface A{}
class AImplementer implements A{};
class B {
A[] array;
B(){
array=new A[]{ new AImplementer(), new AImplementer(), new AImplementer()};
}
}
在那里,保证编译或两次,你的钱回来:)
还免费提供“课程应以大写字母开头”。
您只能分配一个数组到一个数组文字(我不知道你称为这些野兽)在变量的声明。所以这可能是好的
// 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() {
}
}
我认为你仍然需要第二个“新”,如:a [] array = new a [] {blah}(但不是我低估了你 - 这是一些飞行)。 – 2011-05-15 02:15:59
@ Bill:不,代码编译没有新的很好。自己尝试一下,以确保。只有在不声明时启动数组,才需要新的a []。我们的任何代码都可以工作。 +1为你的伟大榜样。 /皮特 – 2011-05-15 02:39:41
@比尔K +1更好的代码。顺便说一句:这些代码都能很好地编译'String [] str1 = {“”,“”,“”}; \t \t \t \t String [] str2 = new String [] {“”,“”,“”};'@Hovercraft Full Of Eels +1首先给出'相同'的答案并被低估,为什么地狱知道? – Boro 2011-05-15 02:41:36
这给我一个预期的错误,在新的 –
David
2011-05-15 02:19:01
是因为你没有定义一个实现?在那里,我想我把你想要的。那对你有用吗? – 2011-05-15 02:22:30
另请注意,如果你真的打算使用b作为“aImplementer”,那么你的逻辑也是错误的,因为b会在构造函数中递归并创建b,直到内存不足。 – 2011-05-15 02:33:12