【发布时间】:2014-08-12 15:12:19
【问题描述】:
是否有可能完成这样的任务。这里的 article 处理 private static 字段成员,但在这种情况下它没有帮助,因为最终成员无法分配。
使用private static final 作为成员限定符的理由:
- 数据成员是一个 ServiceClient,因此将它附加到类型是有意义的,因为它不依赖于实例。它的线程也是安全的,因此它会提高性能,因为我不会为每个实例初始化客户端。
- 服务客户端本身是一个bean,具有单例范围。因此实际上只有一个实例。由于总会有一个实例,因此允许重新分配是没有意义的。
- 由于这个客户端只被这个类的方法使用,它是私有的。
我不确定这是否是反模式,但如果是,那么我的理由是否有资格使用它?如果是,那该怎么做。如果不是,那么请提出一个替代方案(我仍然很想知道如何实现这一点,仅出于知识目的)。
【问题讨论】:
-
如果您没有在现场或在构造函数中初始化
final成员,则无法将其标记为最终 - 这是 Java 编程语言设计,抱歉。类似的情况是 CDI 注入,其中注入的字段通常是包私有的(也不是最终的),以便在不使用 setter 的情况下进行单元测试的注入。 -
您可以对类使用反射以及对
Field类本身的反射,以删除其final修饰符。查看this question here 了解详情。