我如何能够完成以下任务:
public class testClass implements Interface {
public testClass(Interface[] args) {
}
}
所以我可以宣布
Interface testObject = new testClass(new class1(4), new class2(5));
其中class1和class2也是实现Interface的类。
另外,一旦我完成了这个,我怎样才能引用在testClass中使用的每个参数?
谢谢:)
答案 0 :(得分:8)
所以我可以宣布
接口testObject = new testClass(new class1(4),new 等级2(5));
您需要在testClass构造函数中使用varargs:
public testClass (Interface ... args) {
for (Interface i : args) {
doSmthWithInterface (i);
}
}
答案 1 :(得分:4)
您可以使用被视为数组的varargs。例如:
public testClass(Interface... args) {
System.out.println(args[0]);
}
答案 2 :(得分:0)
像这样(将整个样本保存到文件中,比如testClass.java):
interface Interface{}
public class testClass implements Interface
{
public testClass(Interface ... args)
{
System.out.println("\nargs count = " + args.length);
for( Interface i : args )
{
System.out.println( i.toString() );
}
}
public static void main(String[] args)
{
new testClass(
new Interface(){}, // has no toString() method, so it will print gibberish
new Interface(){ public String toString(){return "I'm alive!"; } },
new Interface(){ public String toString(){return "me, too"; } }
);
new testClass(); // the compiler will create a zero-length array as argument
}
}
输出如下:
C:\temp>javac testClass.java
C:\temp>java testClass
args count = 3
testClass$1@1f6a7b9
I'm alive!
me, too
args count = 0
答案 3 :(得分:0)
你不必使用varargs,你可以使用数组作为输入参数,varargs基本上只是数组参数的一种奇特的新语法,但它将有助于防止你必须在数组中构造自己的数组打电话给你 即,varargs允许(parm1,parm2)被接收到数组结构中
您不能使用接口来强制构造函数,您应该使用具有所需构造函数的公共抽象超类。
public abstract class Supa {
private Supa[] components = null;
public Supa(Supa... args) {
components = args;
}
}
public class TestClass extends Supa {
public TestClass(Supa... args) {
super(args);
}
public static void main(String[] args) {
Supa supa = new TestClass(new Class1(4), new Class2(5));
// Class1 & Class2 similarly extend Supa
}
}