4

过去我经常在 Java 类中使用“import static”构造。最近我意识到,而不是

import static my.pack.A.MY_CONSTANT;

您可以使用

import my.pack.A;

public class B {
    private static final MY_CONSTANT = A.MY_CONSTANT;
}

这种方法最明显的优点是:

  1. 您可以在 Eclipse 中使用重构轻松地从代码中删除所有长常量表达式A.B.C.CONSTANT.ANOTHER_ONE.TOO_LONG,而不会弄乱静态导入(在 Eclipse 中掌握起来并不那么快)
  2. 您可以为任何表达式赋予任何名称,这在当前上下文中可能更有意义。

例如:

private static final PAYMENT_TYPE = PaymentType.CASH;
...
calculateSomething(amount, PAYMENT_TYPE);

代替

import static my.pack.PaymentType.CASH
...
calculateSomething(amount, CASH);

如果默认的 PaymentType 值更改为 CREDIT_CARD,这也更容易重构。

我的问题是:与静态导入相比,这种方法有什么缺点,还是可以在任何地方使用?

我现在唯一关心的是生成的编译 .class 文件,这可能与所描述的两种方法不同。因此理论上性能和内存使用可能会受到影响。

4

2 回答 2

5

我认为唯一的缺点是你有更多的代码,你将一个常量分配给另一个常量。除此之外应该没有区别。性能和内存无关紧要,您可能会有更多引用返回到相同的常量池条目。即使它创建了单独的常量池条目,也需要很多条目才能有所作为。

在无法重命名原始条目的情况下,能够为常量命名可能是一件非常好的事情。

于 2013-01-29T13:51:00.677 回答
3

It is mostly a matter of taste, but the official docs recommend using the static version sparingly, especially with a wildcard. The main downside of static import is that it pollutes your namespace by added all the static members to it. In your above example, it should be about what you think it more readable for your code. Resist the urge to do "import package.*" unless you really want all the static members of package.

It should not effect your compiled code -- it is merely provides a shorthand access to the same constant.

于 2013-01-29T14:00:02.853 回答