【问题标题】:Is it possible to declare multiple strings as parameters to a method in a more compact way?是否可以以更紧凑的方式将多个字符串声明为方法的参数?
【发布时间】:2021-03-05 12:03:13
【问题描述】:

我一直在尝试将多个字符串声明为方法的参数,而不为每个参数指定它们的类型,但是我没有成功。

我有什么:

private void Fields(String sName, String sSurname, String sMessage) {
   teName.setText(sName);
   teSurname.setText(sSurname);
   teMessage.setText(sMessage);
}

我想要什么:

private void Fields(String sName, sSurname, sMessage) {
   teName.setText(sName);
   teSurname.setText(sSurname);
   teMessage.setText(sMessage);
}

当然,第二个例子不起作用,但这只是为了让您了解我的意思。

有没有更短的方法?

【问题讨论】:

  • 简短回答:不,它们是必需的。
  • 更长的答案 - 你可以使用反射并在这个想法上开枪,将名为 paramName 的参数分配给名为 "prefix" + "paramName" 的类字段,只是因为你认为它会节省你的时间或打字。
  • 等一下,你想省略参数的类型吗?你试过private void method(String... varArgList)
  • 看看this question 了解如何做到这一点。
  • 出于兴趣,你为什么要这个?我只能看到它带来痛苦。 Varags 可能是一个解决方案,但是您需要保持将参数放入所有调用站点的方法调用的顺序,因此不太理想。

标签: java


【解决方案1】:

您肯定尝试过运行您的代码并遇到语法错误。 不——不可能。

但您可以执行以下操作:

private void Fields(String[] mydata) {
   teName.setText(mydata[0]);
   teSurname.setText(mydata[1]);
   teMessage.setText(mydata[2]);
}

电话可能是:

Fields(new String[] { "whatever", "strings", "you want" });

这样你必须照顾你的索引,并冒着 arrayindexoutofbound-exception 的风险。但这是可能的。

【讨论】:

  • 一个可变参数列表会更好,不是吗?
  • 请注意,这样做会导致编译时检查是否有正确数量的参数。
  • @sweeper 失去编译时间是什么意思?有没有更有效的方法?
  • @Abrie 您可以将任意数量的参数传递给该方法,编译器不会抱怨。如果您传入的参数少于 3 个,它只会在运行时抛出异常。这与效率无关。这不是“失去编译时间”,而是“失去编译时间检查”,即在编译时完成的检查。
  • 哦,很公平。谢谢你的解释^^
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
  • 2012-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-09
相关资源
最近更新 更多