【问题标题】:Use Enum-value without using Enum-classname使用枚举值而不使用枚举类名
【发布时间】:2012-11-05 02:22:27
【问题描述】:

我在接口中使用静态枚举,并希望在扩展类中使用它。

我有以下接口:

public interface StateSupport {
    public static enum State {
        NEW,
        UNCHANGED,
        UPDATED;
    }
}

public interface Support extends StateSupport  {
    public void do(Context arg0);
}

最后是一堂课

public class MyClassUtil implements Support {
    public void do(Context arg0){ 
        MyClass obj = new MyClass(NEW);
    }

}

关键是我不想写“State.NEW”,只是“NEW”:-)

那么如何在不使用枚举名称的情况下做到这一点。有办法吗?

【问题讨论】:

  • 呃,你为什么要特意降低代码的可读性?
  • 可读性在读者眼中。我更喜欢静态导入,只要它们足够明显(通常是这样)。

标签: java class inheritance enums


【解决方案1】:

您可以使用静态导入:

import static com.yourpackage.StateSupport.State.NEW;
import static com.yourpackage.StateSupport.State.UNCHANGED;
import static com.yourpackage.StateSupport.State.UPDATED;

或简而言之(不鼓励):

import static com.yourpackage.StateSupport.State.*;

【讨论】:

  • @assylias 是的,但一些指标表明这是不好的做法。
  • 不鼓励导入 *,因为它的含义会随着其他类的变化而变化,并且因为您无法通过仅检查符号所在的编译单元来了解符号所指的内容。
  • @MarkoTopolnik 虽然我大体上同意,但对于枚举值的静态导入,我认为这是可以接受的(这可能是我使用通配符的唯一情况)。
  • @assylias 在你有 两个 通配符导入之前没问题。然后它变得相当混乱。
猜你喜欢
  • 2018-05-27
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多