标签: enums

为什么Enum会实现接口?

我刚刚发现Java允许枚举实现一个接口.什么是一个很好的用例呢?

java enums

180
推荐指数
12
解决办法
15万
查看次数

使用固定值映射JPA中的枚举?

我正在寻找使用JPA映射枚举的不同方法.我特别想设置每个枚举条目的整数值并仅保存整数值.

@Entity
@Table(name = "AUTHORITY_")
public class Authority implements Serializable {

  public enum Right {
      READ(100), WRITE(200), EDITOR (300);

      private int value;

      Right(int value) { this.value = value; }

      public int getValue() { return value; }
  };

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  @Column(name = "AUTHORITY_ID")
  private Long id;

  // the enum to map : 
  private Right right;
}
Run Code Online (Sandbox Code Playgroud)

一个简单的解决方案是使用EnumType注释和EnumType.ORDINAL:

@Column(name = "RIGHT")
@Enumerated(EnumType.ORDINAL)
private Right right;
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,JPA映射枚举索引(0,1,2)而不是我想要的值(100,200,300).

我找到的两个解决方案似乎并不简单......

第一解决方案

这里提出的解决方案使用@PrePersist和@PostLoad将枚举转换为其他字段并将枚举字段标记为瞬态:

@Basic
private int intValueForAnEnum;

@PrePersist
void populateDBFields() {
  intValueForAnEnum = …
Run Code Online (Sandbox Code Playgroud)

java orm enums spring jpa

180
推荐指数
6
解决办法
12万
查看次数

将新值添加到现有ENUM类型

我有一个使用enum类型的表列.我希望更新该enum类型以获得额外的可能值.我不想删除任何现有值,只需添加新值.最简单的方法是什么?

database postgresql enums

178
推荐指数
12
解决办法
10万
查看次数

我可以在Java中设置枚举起始值吗?

我使用枚举来制作一些常量:

enum ids {OPEN, CLOSE};
Run Code Online (Sandbox Code Playgroud)

OPEN值为零,但我希望它为100.是否可能?

java enums

177
推荐指数
6
解决办法
24万
查看次数

如何获得Swift枚举的计数?

如何确定Swift枚举中的个案数?

(我想避免手动枚举所有值,或者尽可能使用旧的" enum_count技巧 ".)

enums count swift

175
推荐指数
12
解决办法
5万
查看次数

为什么在C++中声明枚举时使用typedef?

我多年没有写过任何C++,现在我想回到它.然后我跑过去想着放弃:

typedef enum TokenType
{
    blah1   = 0x00000000,
    blah2   = 0X01000000,
    blah3   = 0X02000000
} TokenType;
Run Code Online (Sandbox Code Playgroud)

这是什么?为什么typedef这里使用关键字?为什么名称TokenType在此声明中出现两次?语义与此有何不同:

enum TokenType
{
    blah1 = 0x00000000,
    blah2=0x01000000,
    blah3=0x02000000
};
Run Code Online (Sandbox Code Playgroud)

c++ enums typedef

174
推荐指数
7
解决办法
18万
查看次数

C#vs Java Enum(适用于C#的新手)

我已经用Java编程了一段时间,只是投入了一个完全用C#编写的项目.我正试图加快C#的速度,并注意到在我的新项目中几个地方使用的枚举,但乍一看,C#的枚举似乎比Java 1.5+实现更简单.任何人都可以枚举C#和Java枚举之间的差异,以及如何克服这些差异?(我不想开始语言火焰战,我只想知道如何在C#中做一些我以前用Java做的事情).例如,有人可以发布一个C#对应的Sun着名的Planet枚举示例吗?

public enum Planet {
  MERCURY (3.303e+23, 2.4397e6),
  VENUS   (4.869e+24, 6.0518e6),
  EARTH   (5.976e+24, 6.37814e6),
  MARS    (6.421e+23, 3.3972e6),
  JUPITER (1.9e+27,   7.1492e7),
  SATURN  (5.688e+26, 6.0268e7),
  URANUS  (8.686e+25, 2.5559e7),
  NEPTUNE (1.024e+26, 2.4746e7),
  PLUTO   (1.27e+22,  1.137e6);

  private final double mass;   // in kilograms
  private final double radius; // in meters
  Planet(double mass, double radius) {
      this.mass = mass;
      this.radius = radius;
  }
  public double mass()   { return mass; }
  public double radius() { return radius; }

  // universal gravitational constant  (m3 kg-1 s-2) …
Run Code Online (Sandbox Code Playgroud)

c# java enums language-comparisons

172
推荐指数
6
解决办法
6万
查看次数

C#中的枚举应该有自己的文件吗?

我有一个使用枚举的类,枚举当前在它自己的文件中,这看起来很浪费.

将枚举放在文件命名空间中的一般意见是什么?或者枚举真的应该存在于自己的cs文件中吗?

编辑

我应该提一下,虽然有问题的类使用这些枚举,但外部调用者也是如此.换句话说,另一个类可以设置这些枚举.因此,他们不会在课堂内部使用,否则这个问题将毫无疑问.

c# enums coding-style

172
推荐指数
13
解决办法
6万
查看次数

如何将枚举设置为null

我有一个枚举

string name;

public enum Color
{
  Red,
  Green,
  Yellow
}
Run Code Online (Sandbox Code Playgroud)

如何在加载时将其设置为NULL.

name = "";
Color color = null; //error
Run Code Online (Sandbox Code Playgroud)

编辑:我的不好,我没有正确解释.但所有与可空的相关的答案都是完美的.我的情况是如果,我已经在类中使用其他元素(例如名称等)获取/设置枚举.在页面加载时,我初始化类并尝试将值默认为null.这是场景(代码在C#中):

namespace Testing
{
    public enum ValidColors
    {
        Red,
        Green,
        Yellow
    }

    public class EnumTest
    {
        private string name;
        private ValidColors myColor;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        public ValidColors MyColor
        {
            get { return myColor; }
            set { myColor = value; }
        }

    }

    public partial class _Default : …
Run Code Online (Sandbox Code Playgroud)

c# null enums nullable

172
推荐指数
5
解决办法
20万
查看次数

如何在C++中使用枚举作为标志?

enums作为标志处理可以在C#中通过[Flags]属性很好地工作,但是在C++中执行此操作的最佳方法是什么?

例如,我想写:

enum AnimalFlags
{
    HasClaws = 1,
    CanFly =2,
    EatsFish = 4,
    Endangered = 8
};

seahawk.flags = CanFly | EatsFish | Endangered;
Run Code Online (Sandbox Code Playgroud)

但是,我收到关于int/ enum转换的编译器错误.是否有更好的表达方式而不仅仅是直接的铸造?优选地,我不想依赖来自第三方库的构造,例如boost或Qt.

编辑:如答案中所示,我可以通过声明seahawk.flags为避免编译器错误int.但是,我想有一些机制来强制执行类型安全,所以有人不能写seahawk.flags = HasMaximizeButton.

c++ enums

171
推荐指数
13
解决办法
13万
查看次数