问题标签 [enumset]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 从弹簧表单复选框元素接收 EnumSet?
我已经看到了一些关于这个主题的相关问题,但没有一个似乎与我所追求的完全匹配。
我有一个表单,我希望用户能够从复选框列表(由枚举支持)中选择多个项目,并将其作为 Set 接收。我有以下(以天为例)
我的枚举:
将枚举值发送到控制器中的页面以显示为选项:
将选项写入复选框并映射到正确的表单字段:
支持表单的表单对象:
这可以正确显示选项,但是当我尝试提交时,出现错误:
org.springframework.validation.BindException:org.springframework.validation.BeanPropertyBindingResult:1 个错误字段“days”上的对象“filterForm”中的字段错误:拒绝值 [0,1];代码 [typeMismatch.filterForm.days,typeMismatch.days,typeMismatch.java.util.EnumSet,typeMismatch]; 参数 [org.springframework.context.support.DefaultMessageSourceResolvable: 代码 [filterForm.days,days]; 论据 []; 默认消息 [天]];默认消息 [无法将类型“java.lang.String[]”的属性值转换为属性“days”所需的类型“java.util.EnumSet”;嵌套异常是 org.springframework.core.convert.ConversionFailedException: 无法从 java.lang.String[] 类型转换为值 '{0, 1}' 的 java.util.EnumSet 类型;嵌套异常是 java.lang。
知道问题是什么,或者是否有更好的方法来实现这一目标?谢谢
java - 强制孩子使用自己定义的枚举
假设我有一个父级抽象动物训练师课程:
我希望对父级动物训练师进行具体扩展,以仅完成对其定义的可训练对象的训练。因此,如果我有一个具体的训狗师,如下所示:
用当前定义的DogTrainer
I 只能trainingComplete
为DogTrainer.Tricks
类型的参数做。但我想强制任何创建混凝土的人都应该Trainer
允许它在自身内部定义。trainingComplete()
Trainables
换句话说,我当前设计的问题是,如果我有另一个训练器,如下所示:
没有什么可以阻止某人定义另一个试图教狗的胭脂训练师,警察技巧:
我想禁止这样做并允许扩展类仅使用他们自己指定的可训练对象。
我怎样才能做到这一点?
java - 以 EnumSet(不同类型)作为参数的相同方法名称
我有一个方法A
现在,我想编写一个新方法 B,使其具有相同的签名但采用不同类型的 EnumSet。
当我这样做时,eclipse给了我一个相同擦除的错误。有没有办法解决这个目的?提前致谢。如果您需要更多说明,请告诉我。
java - EnumSet中枚举的限制数量是怎么来的?
我发现EnumSet 中使用了枚举的限制数量( 64 )。请参阅下面 EnumSet 源代码中的一个方法(此代码是从 JDK 1.7 中捕获的)。
从上面的代码我们可以看出:如果Enum数组的长度小于64,则使用RegularEnumSet。否则,将使用JumboEnumSet代替。
这里我的问题如下:
- 这个枚举的限制数(64)是怎么来的,或者怎么计算为64?
- 为什么同时使用RegularEnumSet和JumboEnumSet,这样做有什么好处?
java - 我应该使用 EnumSet 吗?
我正在尝试构建一个“平面文件阅读器”。这些文件将有几个相关的列,例如“客户名称”、“电话”等,但每个平面文件的列号会有所不同;此外,一些平面文件将包含其他文件没有的列。
我希望 FlatFileReader 类可以读取这些不同的文件中的每一个。所以我为第一个平面文件创建了一个枚举,其中的值是一个数组的索引。
因此,例如,为了从平面文件中获取名称,FlatFileReader 将调用该方法:
而 FlatFileA 会查找索引 0。平面文件类将有很多种,我希望每个类都继承相同的枚举,以使其保持一致;问题是某些文件没有某些列。因此,如果 FlatFileB 没有 TELEPHONE 列,我不能在父类(或接口)中执行 NAME、TELEPHONE、PAYMENT。
我该如何解决这个问题?这是 EnumSet 的使用方式吗?每个子类可以创建一个 EnumSet 并且只添加它需要的常量吗?如果我创建了一个 EnumSet 并且只添加了 NAME 和 PAYMENT,那么 PAYMENT 现在的值是 1(在 EnumSet 内)还是仍然是 2?
java - Java:如何编写接受实现给定接口的枚举常量的通用函数?
所以我有一堆枚举,它们都扩展了一个接口:
然后我有几个扩展接口的枚举:
我想要一个只接受扩展这个接口的枚举的函数。我不能做:
因为,在函数内部,我使用 EnumSet.of(input) 创建了一个 EnumSet。我不能做
因为,在函数内部,我需要创建一个需要传递给另一个函数的 Map。那么有没有任何类型安全的方法来做到这一点而无需强制转换?
编辑:更正了接口定义。
generics - 泛型:预期类型的数组
我有以下代码:
这给了我以下警告:
'ABC[]' 类型的数组预计在第 43 行
这很危险吗?或者我可以忽略它吗?为什么会有这个警告?
java - 在现代 Java 8 API 中使用位域而不是 EnumSet 的理由
EnumSet
,和它本身一样古老enum
(都是从 Java 5 开始的),应该是位域用例的不折不扣的替代品:与位域一样快速和精简(好吧,除了不是原始类型),并且类型安全引导. 另一方面,最近和多年来最受期待的 Java API——Streams API——毫不掩饰地使用位域Spliterator
来表示.
我是否应该将以上内容视为核心 Java 专家的明确承认,EnumSet
毕竟这并不好?我是否应该重新考虑永远不要使用位域的常见最佳实践建议?
java - 来自数组的 EnumSet,最短的变体?
我需要一个EnumSet
来自数组的(通过 varargs 方法参数给出)。EnumSet
首先,令我惊讶的是(有)中没有可变参数构造函数方法EnumSet#of(E first, E... rest)
。作为一种解决方法,我使用了以下变体:
但是,这会触发java.lang.IllegalArgumentException: Collection is empty
. 所以,现在我得到了以下结果,这看起来有点荒谬:
如果当然可以将其移至某些实用方法,但是,我仍然在问自己是否有使用现有方法的更简单方法?
java - EnumSet - 移动交叉点的有效方法
我有两个枚举集。
我想将某些值从一个转移到另一个,但在两个对象中保留那些被认为“不可移动”的值。示例代码...
我尝试了各种方法,但都涉及许多步骤和临时 EnumSet 的创建。我想知道是否有一种真正有效的方法以及(当然)它是什么。
这让我头疼!
谢谢。
更新:
我尝试的一种方法(我认为可能效率低下)来达到预期的结果......