标签: enumset

当A继承自B时,从EnumSet <A>转换为Set <B>

标题几乎解释了这个问题.我有一个接口方法:

Set<Field> getFieldSet()
Run Code Online (Sandbox Code Playgroud)

我有一个类,User看起来像这样

class User {
    enum Fields implements Field {
        USERNAME, PASSWORD;
        ...
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在我想实现UsergetFieldSet()方法.天真的方式似乎只是return EnumSet.allOf(Fields.class)但我得到以下错误:

> Type mismatch: cannot convert from Set<User.Fields> to Set<Field>
Run Code Online (Sandbox Code Playgroud)

除了手动复制EnumSet之外Set<Field>,还有一个很好的方法吗?

java enums enumset

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

在EnumSet和布尔值数组之间转换

我有一个EnumSet并且想要来回转换为布尔基元数组.如果它工作得更好,我可以使用一个List而不是数组,和/或Boolean对象而不是布尔基元.

enum MyEnum { DOG, CAT, BIRD; }
EnumSet enumSet = EnumSet.of( MyEnum.DOG, MyEnum.CAT ); 
Run Code Online (Sandbox Code Playgroud)

我想在另一端获得的是一个如下所示的数组:

[TRUE, TRUE, FALSE]
Run Code Online (Sandbox Code Playgroud)

这里的这个问题与此类似,将EnumSet转换为整数数组.区别:

  • 布尔值或Boolean整数(显然)
  • 我想要枚举枚举的所有成员,TRUE每个枚举元素包含在EnumSeta和a中FALSE,每个元素都被排除在外EnumSet.另一个问题的数组仅包括在中找到的项目EnumSet.(更重要的是)

java enums boolean list enumset

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

Java:如何编写接受实现给定接口的Enum常量的泛型函数?

所以我有一堆枚举,它们都扩展了一个接口:

public interface MyInterface {}
Run Code Online (Sandbox Code Playgroud)

然后我有几个扩展界面的枚举:

public enum A implements MyInterface {}

public enum B implements MyInterface {}
Run Code Online (Sandbox Code Playgroud)

我想要一个只接受扩展此接口的枚举的函数.我不能做:

public void MyFunction(MyInterface input)
Run Code Online (Sandbox Code Playgroud)

因为,在函数内部,我使用EnumSet.of(输入)创建一个EnumSet.我做了

public <T extends Enum<T>> void myFunction(T input)
Run Code Online (Sandbox Code Playgroud)

因为,在函数内部,我需要创建一个需要传递给另一个函数的Map.那么有没有任何类型安全的方法来做这个没有铸造?

编辑:更正的接口定义.

java generics enums type-safety enumset

4
推荐指数
1
解决办法
223
查看次数

Java中有类似嵌套枚举的东西吗?

我想做一个国家枚举,我可以从中访问其状态,我该怎么做?

像这样的东西:

public enum SomeEnum {

     ARGENTINA {
       BUENOS_AIRES;
     }

     UNITED_STATES {
       CALIFORNIA, FLORIDA, NEW_YORK, ALASKA;
     }

}

SomeEnum state1 = SomeEnum.ARGENTINA.BUENOS_AIRES
SomeEnum state2 = SomeEnum.UNITED_STATES.CALIFORNIA;
Run Code Online (Sandbox Code Playgroud)

java enums types enum-map enumset

4
推荐指数
1
解决办法
6105
查看次数

EnumSet 方法不会将任何枚举类型识别为枚举

有许多关于类似错误的类似问题,但它们都是关于在尝试创建该类型的 EnumSet 之前枚举类型尚未初始化的特定情况。我的问题非常非常基本。我无法让任何 EnumSet 方法将任何枚举识别为枚举,无论我尝试做的事情多么简单。例如:

> enum X{GREEN,RED,YELLOW}
> X.values()
{ GREEN, RED, YELLOW }
> EnumSet.allOf(X.class);
java.lang.ClassCastException: class X not an enum
   at java.base/java.util.EnumSet.noneOf(EnumSet.java:113)
   at java.base/java.util.EnumSet.allOf(EnumSet.java:132)
   at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
   at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
Run Code Online (Sandbox Code Playgroud)

无论我尝试使用什么 EnumSet 方法,我都会得到完全相同的错误。有谁知道我可能做错了什么?我在 JDK 8 中使用 DrJava,因为这是我学到的东西,我只是为了好玩而这样做,所以我不需要使用最新的开发工具包,这可能是问题吗?文档说 EnumSet 是 Java 8 的一部分,所以我认为不是,但我不知道。

java enums enumset

4
推荐指数
1
解决办法
44
查看次数

在构造函数中使用枚举的java枚举

是否可以让java中的枚举将一组枚举作为参数?如果是,那我该如何实现呢?

使用这个时,我想说的是:拿一个MODAL_SETTINGS.EDIT_MODAL_WINDOW并使用按钮MODAL_BUTTONS.SAVE和MODAL_BUTTONS.CANCEL创建它.

这就是我现在所拥有的

public enum MODAL_SETTINGS {
    NEW_MODAL_WINDOW(MODAL_BUTTONS.class),
    EDIT_MODAL_WINDOW(MODAL_BUTTONS.class),
    DELETE_MODAL_WINDOW(MODAL_BUTTONS.class);

    private EnumSet buttons;

    private MODAL_SETTINGS(EnumSet<MODAL_BUTTONS> buttons){

    }

}
public enum MODAL_BUTTONS {
    SAVE, UPDATE, CANCEL, DELETE
}
Run Code Online (Sandbox Code Playgroud)

java enums enumset

3
推荐指数
2
解决办法
2万
查看次数

Java中的线程安全Enumset

我使用以下代码初始化EnumSet的同步实例:

private final Set<MyClass> instance = Collections.synchronizedSet(EnumSet.noneOf(MyClass.class));
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  • 在这种情况下,我是否保留了EnumSet的所有好处,如紧凑性和效率?
  • 是否有更多... ... ...语义丰富的方式来获得一个空的和同步的EnumSet实例?

java multithreading enumset

3
推荐指数
1
解决办法
680
查看次数

你如何在Java中正确扩展/子类EnumSet?

我试图扩展EnumSetComparable在Eclipse中实现.但是,从一开始我就充满了错误.这是我开始的:

package sets;

import java.util.EnumSet;


enum Suits{
    SPADE, DIAMOND, CLUB, HEART;
}

class ExtendedEnumSet extends EnumSet<Suits> implements Comparable<Suits> {

}
Run Code Online (Sandbox Code Playgroud)

(问题1)定义显式构造函数

它立即通知我:Implicit super constructor EnumSet<Suits>() is undefined for default constructor. Must define an explicit constructor.所以,我按照快速修复,它添加了以下构造函数:

ExtendedEnumSet(Class<Suits> finalArg0, Enum[] finalArg1) {
    super(finalArg0, finalArg1);
    // TODO Auto-generated constructor stub
}
Run Code Online (Sandbox Code Playgroud)

......然后它通知我:The constructor EnumSet<Suits>(Class<E>, Enum[]) is not visible.我已经尝试更改此类和此构造函数的访问修饰符无济于事.

(问题2)重写抽象方法

下一个问题是当我决定继续并修复Eclipse报告的下一个错误时:The type ExtendedEnumSet must implement the inherited abstract method AbstractCollection<Suits>.iterator().当然,这只是冰山一角.我再次使用快速修复(add unimplemented methods)并添加以下内容: …

java constructor extends subclass enumset

3
推荐指数
1
解决办法
1113
查看次数

Java中的哪个类实现了抽象类EnumSet?

我看到EnumSet.of()返回EnumSet类型的对象的实例.但我无法弄清楚哪个类实际实现了这个抽象类?当你没有子类化它时,如何获得抽象类型EnumSet的实例?

java enumset

3
推荐指数
2
解决办法
183
查看次数

如何将任何(仅在运行时已知)Kotlin 枚举作为参数传递给 Java 代码中的方法?

假设我们有枚举

enum class Status {
    OPEN, CLOSED
}

enum class Weekday {
    WORKDAY, DAYOFF
}
Run Code Online (Sandbox Code Playgroud)

有一个 Java 类

public KotlinInvoker {
    public methodWithKotlinEnumAsParameter_namely_AppendWorkingStatusString( ? kotlinEnum) {
    ...
    }
}
Run Code Online (Sandbox Code Playgroud)

目标是直接将任何 jave / kotlin 枚举传递给那种函数,就像 Java 一样

    <E extends java.lang.Enum<E>>
    methodAcceptingEnumAsParameter(E enum) {
    ...
    return result + ' ' + enum.toString();
    }
Run Code Online (Sandbox Code Playgroud)

所以你可以将任何枚举传递给它。应该是什么方法签名才能很好地与 kotlin 枚举一起使用,并且根据官方 kotlin 文档将其映射到 java 枚举?

java enums enumset kotlin

3
推荐指数
1
解决办法
3628
查看次数