【发布时间】:2013-01-29 13:47:39
【问题描述】:
过去我经常在 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;
}
这种方法最明显的优点是:
- 您可以在 Eclipse 中使用重构轻松地从代码中删除所有长常量表达式,例如
A.B.C.CONSTANT.ANOTHER_ONE.TOO_LONG,而不会弄乱静态导入(在 Eclipse 中掌握起来并不那么快) - 您可以为任何表达式指定任何名称,这在当前上下文中可能更有意义。
例如:
private static final PAYMENT_TYPE = PaymentType.CASH;
...
calculateSomething(amount, PAYMENT_TYPE);
而不是
import static my.pack.PaymentType.CASH
...
calculateSomething(amount, CASH);
如果默认 PaymentType 值更改为 CREDIT_CARD,这也更容易重构。
我的问题是:与静态导入相比,这种方法有什么缺点吗?或者它可以在任何地方使用吗?
我现在唯一关心的是生成的编译后的 .class 文件,这可能与所描述的两种方法不同。所以理论上性能和内存使用可能会受到影响。
【问题讨论】:
-
您是否考虑过使用 Enums 代替?他们似乎更适合这种情况。
-
不确定,枚举如何解决我将一些现有常量导入类文件的问题。实际上,枚举的值可以通过任何一种方式导入,类似于常量。
-
能不能同时编译两个版本,反编译对比一下区别?
-
太抽象了。 PaymentType 看起来像接口常量反模式。
-
嗯,枚举不需要静态导入,它们是隐式静态的。
标签: java performance memory import constants