有没有办法以某种方式减少或压缩传递给main
的参数数量,这些参数很多?
假设我有一个Ludo游戏,我需要传递一些玩家,名字,颜色,玩家类型(人类,计算机),计算机玩家的AI类型。这是很多争论。
我认为我不能使用Effective Java中描述的任何技术。有没有聪明的方法来实现这个目标?
答案 0 :(得分:1)
如果您愿意对事物进行非规范化并接受例如CSV字符串,那么可以将所有内容减少为一个参数:
"3, Jack, Jill, Jon, ..."
然后在main()
方法中解析CSV:
public static void main(String[] args) {
String input = args[0];
String[] params = input.split(",\\s+");
int numPlayers = Integer.parseInt(params[0]);
String name1 = params[1];
// and so on
}
答案 1 :(得分:1)
如何将参数存储在文件中,并将文件名路径作为参数
答案 2 :(得分:0)
如果你想在程序开始时获取这些信息,那么你最好从csv文件中读取它们,因为它们很容易在java中访问和操作。
如果您想将这些信息从一个方法传递到另一个方法,我建议使用一个模型类,它存储程序运行时所需的所有有价值的信息。这会提高性能,因为每次将信息传递给新方法时都不需要为变量分配新空间。
答案 3 :(得分:0)
我喜欢在PHP中将长参数列表作为关联数组或在Javascript中作为对象文字传递。在我的函数内部,我有一个默认值的数组。然后我接受传递的params数组并用传递的覆盖默认值。这样我就不必记住任何顺序,我可以省略我不想传递的参数/我想使用默认值的地方,并且数组键使代码在调用函数的地方更具可读性
示例(抱歉,PHP):
function talk(array $params)
{
$defaults = [
'foo' => 'Hi,',
'bar' => 'my ',
'baz' => 'name is ',
'foobar' => 'Benni'
];
$eff_params = array_merge($defaults, $params);
return $eff_params['foo'] . $eff_params['bar'] . $eff_params['baz'] . $eff_params['foobar'];
}
然后调用这个函数:
echo talk([
'foobar' => 'Ted',
'foo' => 'Hello '
]);
// Hello my name is Ted
BTW,JQuery经常使用这种技术,例如:因为它是$ .ajax()函数