有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java特定的枚举可以有属性吗

这是一个一般性的问题,而不是一个具体的问题

我正在做一个项目,在这个项目中,我们得出了这样一个结论:将枚举用于我们称之为“操作”的东西可能是最明智的。我们有一个所谓的操作,它需要一个辅助属性“Roles”,但我不确定是否可以从枚举中获得一个值来具有辅助属性,而其他值没有

希望我的问题有意义,即使我没有任何代码xD


共 (1) 个答案

  1. # 1 楼答案

    是的,这是完全可能的,但是这取决于您希望如何处理从一个enum到另一个的字段缺失

    这里有两个命题

    使用异常

    enum TheEnum {
        WITHOUT_ROLE, WITH_ROLE(() -> "boss");
    
        private Supplier<String> roleSupplier;
    
        TheEnum() {
            this(() -> {throw new NoRoleException();}); 
        }
    
        TheEnum(Supplier<String> roleSupplier) {
            this.roleSupplier = roleSupplier;
        }
    
        String getRole() {
            return roleSupplier.get();
        }
    }
    

    使用null

    enum TheEnum {
        WITHOUT_ROLE, WITH_ROLE(() -> "boss");
    
        private String role;
    
        TheEnum() {
            this(null); 
        }
    
        TheEnum(String role) {
            this.role = role;
        }
    
        // The use of Optional is not mandatory, even more if you know how to handle nulls yourself and are not exposing this enum
        Optional<String> getRole() {
            return Optional.ofNullable(role);
        }
    }