【问题标题】:Should I use var in Java 10? [closed]我应该在 Java 10 中使用 var 吗? [关闭]
【发布时间】:2018-10-07 00:04:07
【问题描述】:

鉴于我不能将 var 用于不可表示的类型(空值、匿名类、某些单一方法类以及最重要的相交类型)。我最好不要使用它以获得更好的可读性和一致性(鉴于它仅适用于本地类型)?

我觉得会被滥用,

var a = someObj.getSomeValue().getSomethingElse().returnsSomething();

【问题讨论】:

  • 可以将它用于不可表示的类型。
  • FWIW 我也不喜欢它,所以我的回答是你不应该使用它。就我而言,您应该始终知道类型,并且不写它可能不利于可读性。除此之外,还有许多更多有用的东西可以在语言级别上添加到 Java 中。就是说,在这些事情上我是个老家伙,显然会有其他人不同意,所以这真的只是基于意见,没有明确的答案,而不是这里的主题。
  • 局部变量类型推断的风格指南: openjdk.java.net/projects/amber/LVTIstyle.html
  • 在很多情况下,类型推断使代码更具可读性。当然,如果你编写了糟糕的代码(选择不当的变量名、超长的方法等),那么省略类型信息可能会使你的糟糕代码变得更糟。因此,编写好的代码,并在有帮助的地方使用它。
  • IMO 它给代码增加了歧义。所以不行。比如var var = 10,这里的var推断为long。

标签: java java-10


【解决方案1】:

虽然这可能主要是基于意见,但我想说:不,这不是邪恶的。

var 关键字只有在编译时变量的类型已经明确时才允许使用。而且,它会生成相同的字节码,所以没什么好担心的。

在某些情况下,例如 nullvar 是不允许的。这不会使它变得邪恶,而是变得美好。如果不是这种情况,Java 将不再是静态类型的。 (但是请注意,在您列出的大多数情况下,它允许的。)

我也看不出你的例子有什么问题。由于您的.returnsSomething() 在现实世界中更倾向于类似于.getPerson(),因此读者很清楚var 是一个Person。

【讨论】:

  • null 是 OP 列表中 only 不起作用的情况。即使在那种情况下,我也看不出如何支持它,例如通过总是将Object 推断为null,这意味着“Java 将不再是静态类型的”。
  • 关于您的最后一段,假设getPerson() 返回Person 可能是有效的,但这并不重要。请注意 OP 如何愿意在不知道 getSomeValue()getSomethingElse() 返回的类型的情况下编写像 someObj.getSomeValue().getSomethingElse().returnsSomething() 这样的表达式。这与写var x = someObj.getSomeValue(); var y = x.getSomethingElse(); y.returnsSomething() 没有什么不同……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 2013-12-17
  • 2014-02-18
  • 1970-01-01
相关资源
最近更新 更多