java枚举怎么定义_Java枚举定义

这意味着枚举的类型参数必须从枚举中派生,枚举本身具有相同的类型参数。这怎么可能发生?通过使类型参数为新类型本身。因此,如果我有一个名为StatusCode的枚举,它将等效于:

public class StatusCode extends Enum

现在,如果你检查约束,我们得到Enum< StatusCode> – 所以E = StatusCode。让我们检查:E扩展Enum< StatusCode&gt ;?是!我们没关系。 你可能会问自己这是什么的意思:)好吧,这意味着Enum的API可以引用自身 – 例如,能够说Enum< E>实现可比较的< E&gt ;.基类能够做比较(在枚举的情况下),但它可以确保它只比较正确的枚举类型彼此。 (编辑:嗯,差不多 - 见底部的编辑。) 我使用类似的东西在我的C#端口ProtocolBuffers。有“消息”(不可变的)和“构建器”(可变,用于构建消息) – 并且它们成对类型。涉及的接口是:

public interface IBuilder

where TMessage : IMessage

where TBuilder : IBuilder

public interface IMessage

where TMessage : IMessage

where TBuilder : IBuilder

这意味着,您可以从消息中获取适当的构建器(例如,获取消息副本并更改某些位),并从构建器中获取适当的消息。这是一个很好的工作API的用户不需要真正关心这 – 虽然 – 它是可怕的复杂,并采取了几个迭代,以达到它的地方。

编辑:请注意,这并不会阻止你创建奇怪的类型,使用本身是好的类型参数,但是不是相同的类型。目的是在正确的情况下给予好处,而不是保护你免受错误的情况。

因此,如果Enum在Java中没有被“特殊”处理,您可以(如注释中所述)创建以下类型:

public class First extends Enum {}

public class Second extends Enum {}

第二将实现可比较的而不是比较 …但第一本身将是罚款。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值