Java 函数的参数

Java 函数的参数,java,function,arguments,Java,Function,Arguments,我需要一个包含更多参数的函数,如下所示: private GroupLayout function(Container host, Class J1, String nameofJ1, Class J2, String nameofJ2,..................Class Jn, String nameofJn) { //body } 一种可定制的Grouplayout功能,可用于更多应用程序 我试过: private GroupLayout function(Container

我需要一个包含更多参数的函数,如下所示:

private GroupLayout function(Container host, Class J1, String nameofJ1, Class J2, String nameofJ2,..................Class Jn, String nameofJn) {
//body
}
一种可定制的Grouplayout功能,可用于更多应用程序

我试过:

private GroupLayout function(Container host, Class ...arg, String ...arg1) {
    //body
}
but didn't work, it said "varargs parameter must be the last parameter, and with class are some problems.
例如,我希望函数调用为: 函数(NamePanel,JButton,“xxx”,JMenu,“yyy”,JComboBox,“zzz”),并在NamePanel上形成一个GroupLayout,其中JButton名为“xxx”,JMenu名为“yyy”,依此类推


有人知道这个问题的答案吗?

Varargs

不能多次使用varargs。为什么?编译器将不知道您传入了哪些参数

请参见使用
String
的示例,其中编译器的第一个参数是
String
,其余(0..n)是vararg(编译成数组):

只要编译器不知道
arg1
在哪里结束和
arg2
在哪里开始,这个包含多个vararg的变量就不起作用:

static void function(String arg, String ...arg1, String ...arg2) { }    // DOESN'T COMPILE
因此,varargs必须始终是最后一个形式参数

解决方法

您似乎想要传递一对
字符串
。传递这些对的最佳方法是使用基于键值的结构
Map
,该结构还保证相同数量的键和值相等

private GroupLayout function(Container host, Map<Class<?>, String> classStringMap) {
    // method body
}
private GroupLayout函数(容器主机,Map是您的朋友)

这是


另外请看。

您的用例太模糊,无法提供具体帮助,但听起来您可能正在寻找一个
映射。
。这是关于只调用functionClass…arg和String…arg1都是变量arg。您只能有一个变量arg,并且它必须位于方法参数列表的末尾。在一个方法中有这么多参数是非常困难的实际上是糟糕的设计,你应该重新考虑你的解决方案。
static void function(String arg, String ...arg1, String ...arg2) { }    // DOESN'T COMPILE
// are both "2" and "3" an 'arg1' and 'arg2' is empty or different?
function("1", "2", "3");  
private GroupLayout function(Container host, Map<Class<?>, String> classStringMap) {
    // method body
}
Map<Class<?>, String> map = new HashMap<>();
map.put(J1.class, "name of J1");
map.put(J2.class, "name of J2");
...
function(container, map);