相关疑难解决方法(0)

我可以在Java中在运行时添加和删除枚举元素

可以在运行时从Java中的枚举中添加和删除元素吗?

例如,我可以从文件中读取枚举的标签和构造函数参数吗?


@saua,这只是一个问题,它是否真的可以完成.我希望有一些改变运行字节码的巧妙方法,可能使用BCEL或其他东西.我也跟进了这个问题因为我意识到我不确定何时应该使用枚举.

我非常确信,如果我希望能够在运行时安全地更改内容,那么正确的答案是使用一个确保唯一性而不是枚举的集合.

java enums

55
推荐指数
4
解决办法
11万
查看次数

如何在编译时确保枚举开关的完整性?

我有几个switch语句测试一个enum.enum必须通过switch语句在语句中处理所有值case.在代码重构期间,可能会发生enum收缩和增长.当enum收缩时,编译器会抛出错误.但是,如果enum增长,则不会抛出任何错误.匹配状态被遗忘并产生运行时错误.我想将此错误从运行时移动到编译时.从理论上讲,应该可以enum在编译时检测丢失的情况.有没有办法实现这个目标?

问题已经存在" 如何检测新值已添加到枚举中并且未在交换机中处理 "但它不包含仅与Eclipse相关的解决方案的答案.

java

38
推荐指数
4
解决办法
7564
查看次数

如何检测新值已添加到枚举中,并且不在交换机中处理

我不时要在项目的枚举类型中添加一个新值.

public enum Day {
  SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, 
   FILENOTFOUND //this one is new one
}
Run Code Online (Sandbox Code Playgroud)

我想要的是每个我没有处理新值的开关都有编译时错误,如下所示:

switch (color) {
        case MONDAY: 
        case TUESDAY: 
        case WEDNESDAY: 
        case THURSDAY: 
                    System.out.println("Mondays are bad.");
                     break;

        case FRIDAY: System.out.println("Fridays are better.");
                     break;

        case SATURDAY:
        case SUNDAY: System.out.println("Weekends are best.");
                     break;
    } 
Run Code Online (Sandbox Code Playgroud)

有一个默认:抛出一些异常是不够好的,我希望它是编译时间.

我不认为这是可能的,但也许有人有一个巧妙的把戏......

我认为Findbugs有一个规则可以找到那些,但我只看到了这个: Eq:为枚举定义的协变equals()方法(EQ_DONT_DEFINE_EQUALS_FOR_ENUM)

编辑:我选择了马克的回复,我确实使用了Eclipse,听起来就像我需要的那样!我根本不是findbugs的专家,所以我可能错过了这样的功能,尽管我不这么认为.

java enums findbugs compilation

6
推荐指数
1
解决办法
1668
查看次数

标签 统计

java ×3

enums ×2

compilation ×1

findbugs ×1