将Java类型表示为varargs

时间:2011-09-20 11:57:42

标签: java variadic-functions

是否可以使用Java功能执行此类操作?

class myClass {int i; String s;}

static void myMethod(myClass... args)
{
...
}

main()
{
   myMethod(2,"two",3,"three");
}

4 个答案:

答案 0 :(得分:5)

这是不可能的。也许您可以创建一个静态辅助方法,使得尽可能简单地创建对象。

static myClass mc(int i, String s) {
    return new myClass(i, s);
}

myMethod(mc(2, "two"), mc(3, "three"));

答案 1 :(得分:4)

不,但您可以创建MyClass的构造函数并调用:

myMethod(new MyClass(2, "two"), new Myclass(3, "three"));

为简洁起见,您可以制作静态导入的工厂方法:

public class MyClass {
    public MyClass create(String s, int i) {
        return new MyClass(s, i);
    }
}

并使用:

myMethod(create(2, "two"), create(3, "three"));

答案 2 :(得分:1)

你可以使用包装类来完成它:

class MyWrapper {
    private int i;
    private String s;

    public MyWrapper(int _i, String _s) {
        i = _i;
        s = _s;
    }
}

class Test {
    static void myMethod(MyWrapper... args) {
        //do work
    }

    public static void main(String[] args) {
        myMethod(new MyWrapper(2, "two"), new MyWrapper(3, "three"));
    }
}

答案 3 :(得分:1)

是的,排序。你需要一个班级的构造函数......

public class MyClass{
   int i
   String s;

   public MyClass(int i, String s){
      this.i = i;
      this.s = s;
   }
}

public static void myMethod(MyClass... instances){
     .....
}

public static void myMethod(Object... args){

    MyClass[] instances = new MyClass[args.length / 2];
    for (int i=0; i<args.length / 2; i++){
         instances[i] = new MyClass((Integer)args[i * 2], (String)args[(i*2) + 1]);
    }

    myMethod(instances);
}

您需要添加错误检查以确保args具有偶数个元素,并且没有一种方法可以强制执行每个 i * 2 元素是一个整数并且每个 i * 2 + 1 是一个字符串。但这是有可能的。

考虑到以上所有,我会说...这是非标准的编程,我不推荐它。但是如你所见,这是有可能的。