【问题标题】:Get rid or duplicate private static摆脱或复制私有静态
【发布时间】:2019-03-10 07:55:15
【问题描述】:

我有以下代码:

private static double calcTotalMass() { return bike_mass + human_mass; }
private static double calcWeight() { return calcTotalMass() * grav_acc; }
private static double calcWork() { return calcWeight() * height; }
...

由于在 Java 中一切都在一个类中,我无法定义全局函数,static 和访问说明符是必要的。

在 C++ 中,我可以将第一个函数缩短为只是

double calcTotalMass() { return bike_mass + human_mass; }

在 Julia 中应该是

calcTotalMass() = bike_mass + human_mass

但那是另一回事。

在 C++ 中,访问说明符是分组的,这样private 就不必为每个方法重复。 Java中是否有类似的东西,或者这只是语言的构建方式?

【问题讨论】:

  • 你需要在任何你需要的地方定义private
  • 简短的回答是否定的,我相信如果您希望在类级别内访问方法,则需要将 private 关键字放入方法
  • 这些额外的关键字真的很重要吗?你写了多少你真的需要关心添加“私有静态”几次?

标签: java methods dry access-specifier


【解决方案1】:

不,每个成员都有单独指定的访问权限。

然而

  • 您可以将方法放在嵌套类/接口中,并将嵌套类型声明为私有。不幸的是,代码向右倾斜,这从来都不是好事。此外,IIRC,有一些奇怪的事情阻止了您自己的嵌套类中的 import static
  • 如果您想费心测试这些方法,private 是一个非常糟糕的选择。最好将它们放在单独的“包私有”类或接口中。
  • 类成员的默认访问修饰符是“包私有”,这是可以接受的。
  • 接口成员的默认访问修饰符是public,这很有用。对于成员变量,您还可以将static 删除。

还有一个 JEP,Concise Method Bodies,它可能会使您的代码更短,更像您的 Julia 示例。

(虽然我在这里:方法名称中的“calc”通常是多余的。可变静态是一个非常非常糟糕的主意。)

【讨论】:

  • 好吧,我正在测试这些方法。我目前只使用一个类(即没有类),所以我的测试代码只是在 public void 方法中。 JEP 已经存在了吗?因为它在文件顶部说草稿。那语法会很棒。很高兴知道我可以省略访问说明符(对我当前的代码没有影响)。
  • 是的,我知道代码很糟糕,但这是我的快速 uni 分配,只使用一些全局变量是最简单的,因为计算只使用 stdin 中的值发生一次 :)
  • 您对可变静态的真正含义是什么?
  • @PostSelf Mutable static (a.k.a. global state):一个可以自己修改的静态字段,或者直接或间接引用一个可以修改的实例字段。
  • 是的,我明白了。所以类比为一个全局变量。我就是这么想的
猜你喜欢
  • 2015-05-21
  • 2011-01-31
  • 2020-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-28
  • 2021-08-10
相关资源
最近更新 更多