java—函数的参数

fcg9iug3  于 2021-07-08  发布在  Java
关注(0)|答案(2)|浏览(408)

我需要一个包含更多参数的函数:

private GroupLayout function(Container host, Class J1, String nameofJ1, Class J2, String nameofJ2,..................Class Jn, String nameofJn) {
//body
}

一个用于更多应用程序的可定制组布局的功能。
我试过:

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.

例如,我希望函数调用为:function(namepanel,jbutton,“”,jmenu,“yyy”,jcombobox,“zzz”),并在namepanel上创建一个grouplayout,jbutton名为“”,jmenu名为“yyy”,依此类推。
有人知道这个问题的解决方法吗?

mum43rcc

mum43rcc1#

可变参数
不能多次使用varargs。为什么?编译器将不知道您传入了什么参数。
请参见使用的示例 String 仅当编译器的第一个参数是 String 其余的(0..n)是vararg(编译成数组):

static void function(String arg, String ...arg1) { }                    // COMPILES
// this is perfectly valid, the first one is 'arg' and the rest is 'arg1'
function("1", "2", "3");

这个有多个vararg的方法不起作用,只要编译器不知道在哪里 arg1 结束和 arg2 开始:

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");

因此,varargs必须始终是最后一个形式参数。
变通办法
你好像想通过一双鞋 Class 以及 String . 传递这些对的最佳方法是使用基于键值的结构 Map<Class, String> 这也保证了相同数量的键和值是相等的。

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);
whlutmcx

whlutmcx2#

他是你的朋友。
这是java builder实现。
再看看lombokbuilder注解。

相关问题