4声明或2参考静态方法更好?

时间:2015-11-17 08:43:36

标签: java performance

我想知道是直接声明还是调用公共静态方法,哪两个会更好。

例如,Java Swing中的GridBagConstraints

通常你需要设置所有四个变量:

GridBagConstraints gc = new GridBagConstraints;
gc.weightx = 1;
gc.weighty = 1;
gc.gridx = 1;
gc.gridy = 1;

这需要很多语句,但是会使一个具有许多重复使用方法的类更好吗?

考虑PublicMethods.java

PublicMethods.java

public class PublicMethods {
    public static void setGC(GridBagConstraints gc, int x, int y) {
        gc.gridx = x;
        gc.gridy = y;
    }
    public static void setGCWeight(GridBagConstraints gc, double x, double y) {
        gc.weightx = x;
        gc.weighty = y;
}

因此,这将处理GridBagConstraints的所有设置。像这样:

PublicMethods.setGCWeight(gc, 1, 1);
PublicMethods.setGC(gc, 1, 1);

根据Java Method invocation vs using a variable,最好优化可读性,如果是这样,与可能需要引用该方法的两个语句相比,有更多行可读?

3 个答案:

答案 0 :(得分:1)

最常见的(在专业的Java开发环境中)方法是:

  • 要么保留第一个解决方案,要将其包装在类中的单独方法调用中,以提高可读性

  • 创建一个类,例如GCUtilConstraintsUtil,您将保留该类 你建议的静态方法。过了一段时间,你可能会有一整套 这类*Util课程应加快发展, 只要它们设计得恰到好处(单一责任,但不是 单一方法各。)。

我个人会选择第二种方法,它更清洁并节省您输入:-)只需确保实际重复使用它! ; - )

答案 1 :(得分:0)

如果您不拥有GridBagConstraints,我不会使用静态方法。原因是你要求读者学习你正在使用的其他随机方法调用,而不是直接使用他们对类的知识。它是一个间接/抽象层,不会增加任何价值。

答案 2 :(得分:0)

我在"短暂处理领域考虑到这一点,因为这些静态方法不一定能减少人为错误或使逻辑更加简洁。他们主要提供"语法糖"。他们不会使代码更具确定性/可预测性(提高安全性)。

一般来说,短期交易可能有点风险。它有时候非常有用,有时可能会让你讨厌你一年后写的代码。

很大程度上取决于你采用这些简短惯例的广泛性,彻底性和一致性。如果您选择使用缩写名称缩写标识符,情况就不会那么不同了。它可以提高可读性和可写性以获得更紧凑的代码(甚至是水平),如果会议如此彻底和一致地应用于您和您的整个团队,它开始成为您可以立即识别的东西一目了然,几乎没有忘记。如果它具有异国情调并且偶尔使用它会损害所有这些所需的指标,在​​这种情况下,它的引入只会为读者提供另一种学习内容并且必须不断记忆。一切都是走钢丝的平衡行为。

因此,每当您做出这些简短的设计决策时,可能要确保的关键是您广泛,彻底和一致地应用它 - 每天使用它们。通过这样做,您可以减少维护代码库的智力开销。如果不这样做并且做空,实际上会增加智力开销。

一个年轻而热情的开发人员往往倾向于将自己的心脏放在正确的位置,希望专注于短手,减少语法,而不是澄清和减少所涉及的逻辑,将两行代码打包成一行 - 衬里,例如,没有以任何方式实际简化逻辑。多年来,当你更加适应那些倾向于使代码库难以维护的实际事物以及使昨天看起来熟悉的代码的特性在今天看起来很陌生时,这是一种平衡的东西。编码人员的一般倾向,特别是处理规模的代码库,就会被他自己的创作所迷惑(而且我会添加,因为他对自己的创作失去了爱情)。发生这种情况的概率减少了你表面上创造的东西越少,你偏离惯用语言就越少。这里的目标是熟悉(不仅仅是代码更少,而且代码更容易变得陌生)。

<强>性能

特别是因为在性能的上下文中提出了这个问题,从性能角度来看,通常更容易在这些类型的实践中轻松实现,减少函数调用的层次。这并不是建议抛弃程序编程的书籍,而是开始编写作为调试的噩梦的单片函数,但任何过度的事情都可能开始成为一件坏事。当您将代码库分解并分解为最少的功能时,特别是在性能最关键的区域中,由于函数调用的成本(在很多场景中可以有效地实现),因此很难进行优化。 ),但仅仅是因为代码分散。在这种情况下,分析热点可能需要您跟踪被调用者的调用者的调用者,甚至可以获得一个有意义的工作的点,值得分析和优化超出最迷恋的微观级别。

所以我的建议是在这里放轻松,无论你选择采用什么样的短手,一定要彻底采纳它们,并由整个团队采用。否则,寻找减少所涉及的代码量的方法,而不是通过更高级别的逻辑来减少代码的数量,并通过改进安全性等方式对设计施加约束(一种不太灵活的设计,以换取更可预测的设计&#39) ;更难以滥用,例如)。如果它不再容易出错并且不比简洁的替代方案显着更低级别,那么对于稍微更详细的语法进行评估会更有用。你需要4行来初始化这个对象而不是2行的代码可能往往是更安全的路由,因为长寿和可维护性甚至优化(不是性能而是更容易的优化)。

如果你想以一种能够更容易地应用集中优化的方式来包装东西,这些优化使用它可以使大量的东西受益,你通常希望建立更高级别的接口,而不仅仅是让你初始化两个字段的接口。一个物体。