相关疑难解决方法(0)

编码提示 - 交集类型和java枚举

交集类型允许您(有点排序)执行具有继承层次结构的枚举.您不能继承实现,但可以将其委托给辅助类.

enum Foo1 implements Bar {}
enum Foo2 implements Bar {}

class HelperClass {
   static <T extends Enum<T> & Bar> void fooBar(T the enum) {}
}
Run Code Online (Sandbox Code Playgroud)

当您有许多实现某种模式的不同枚举时,这很有用.例如,许多具有父子关系的枚举对.

enum PrimaryColor {Red, Green, Blue;}
enum PastelColor {Pink, HotPink, Rockmelon, SkyBlue, BabyBlue;}

enum TransportMedium {Land, Sea, Air;}
enum Vehicle {Car, Truck, BigBoat, LittleBoat, JetFighter, HotAirBaloon;}
Run Code Online (Sandbox Code Playgroud)

您可以编写通用方法,说"好的,给定一个枚举值,该值是某些其他枚举值的父级,子类型的所有可能子枚举中有多少百分比将此特定父值作为其父级?",并且全部使用类型安全,没有铸造完成.(例如:"Sea"占所有可能车辆的33%,"Green"占所有可能车辆的20%).

代码看起来像这样.特别注意"leaf"类本身非常简洁 - 但是泛型类的声明非常难看.没关系:你只写一次.一旦通用类存在,那么使用它们很容易.

下面的助手类只有一些静态方法.其他方式包括

  • 提供一个返回单例的实例,但是根据父/子进行输入
  • 为每个paren/child返回一个实例,适当地键入,并在每个父enum中包含一个实例

使用第二个选项,"children"对象实际上将在帮助器内,因此减少了枚举中所需的代码量.他们都会实例化一个帮助者,并将任何困难的事情委托给他们.

import java.util.EnumSet;

import javax.swing.JComponent;

public class zz extends JComponent {

    public static void main(String[] args) {
        System.out.println(PrimaryColor.Green + " " …
Run Code Online (Sandbox Code Playgroud)

java generics enums

8
推荐指数
1
解决办法
4745
查看次数

如何使用多种枚举类型编写注释?

我正在尝试编写一些注释来帮助将测试用例方法与各种元数据关联起来。到目前为止,我的注释包括 BugFix、UseCase 和 Requirement。我的最终目标是编写一个注释处理器来显示哪些测试用例与各个错误修复、用例和需求相关。

当我刚刚为自己的项目实现此功能时,我为每个测试关联类别创建了特定于我的项目的枚举。例如,我有 ProjectUseCase 枚举,我可以将其作为值传递给测试方法上的 UseCase 注释。这使得在一个地方添加额外的用例或修改用例变得很容易。

现在,我想让我工作中的其他开发人员可以使用此代码。当然,他们将致力于其他具有不同用例、要求和错误修复的项目。

以下是我遇到的问题:

  1. 枚举无法扩展,因此我无法拥有其他人可以为自己的项目扩展的基本用例枚举。
  2. 注释属性的值必须是常量。这阻止我在枚举上使用接口标记 (TestAssociation),并使用 TestAssociation 接口作为注释的值。另外,这会阻止我在注释中使用 String 值,并在使用注释时传入枚举名称,例如:@UseCase(ProjectUseCase.GENERAL.name())。

据我所知,这让我只能使用原始字符串作为值,这剥夺了我的类型安全性和快速重构的能力。使用常量字符串类代替枚举似乎是处理此问题的最佳方法,因为每个开发人员都可以使用自己的类。

我唯一能想到的另一件事是引用 Enum 类(或常量字符串类),并且不将该类包含在 jar 中,将其留给用户实现。

有什么建议或解决方法吗?

我还想知道是否有任何项目已经提供类似的功能。

java enums annotations

5
推荐指数
1
解决办法
1553
查看次数

标签 统计

enums ×2

java ×2

annotations ×1

generics ×1