Sor*_* D. 1 java arrays parameters casting parameter-passing
我希望能够直接编写一个数组作为我的方法的参数,而不是将数组值存储在一个单独的变量中.
例:
public void myMethod(myObject[] objParam, String[] strParam, Integer[] intParam) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
我想调用这样的方法:
myMethod({obj1, obj2}, {"string1","string2"}, {123,456});
Run Code Online (Sandbox Code Playgroud)
目前这在我的IDE中是不可接受的,我尝试过不同的表示法,甚至可以转换为数组,但是没有任何作用.
我不想每次需要使用我的方法时都为每个参数声明和启动一个数组.
有谁知道一个很好的解决方法吗?使用List解决方案?
编辑:参数类型是固定的,对于3个参数中的每一个,数组值将对应1比1.
我能想到的最短的方法就是准备一个这样的课程:
public class ArrUtil {
public static Integer[] arr(Integer... elements) {
return elements;
}
public static String[] arr(String... elements) {
return elements;
}
public static myObject[] arr(myObject... elements) {
return elements;
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以静态导入arr:
import static ArrUtil.*;
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
myMethod(arr(obj1, obj2), arr("abc", "Def"), arr(1, 2));
Run Code Online (Sandbox Code Playgroud)
编辑:你说这些值是相关的.一个更清洁的解决方案是声明一个容器类:
class Foo {
final myObject obj;
final String str;
final int num;
Foo(myObject obj, String str, int num) {
this.obj = obj;
this.str = str;
this.num = num;
}
static Foo Foo(myObject obj, String str, int num) {
return new Foo(obj, str, num);
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以采用varargs参数:
void myMethod(Foo... foos) {
}
Run Code Online (Sandbox Code Playgroud)
并称之为
myMethod(Foo(obj1, "abc", 123), Foo(obj2, "def", 234))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1207 次 |
| 最近记录: |