是否可以使用Java功能执行此类操作?
class myClass {int i; String s;}
static void myMethod(myClass... args)
{
...
}
main()
{
myMethod(2,"two",3,"three");
}
答案 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 是一个字符串。但这是有可能的。
考虑到以上所有,我会说...这是非标准的编程,我不推荐它。但是如你所见,这是有可能的。