2 java
我有两个枚举:
public enum UserType {
USER,
EMPLOYER
}
Run Code Online (Sandbox Code Playgroud)
public enum UserDetails {
USER,
EMPLOYER
}
Run Code Online (Sandbox Code Playgroud)
我尝试通过以下方式进行比较:
if(UserType.USER.equals(UserDetails.USER)){
return true;
}
Run Code Online (Sandbox Code Playgroud)
但我不能因为,我equals()把这个扔给我:
equals() between objects of inconvertible types 'UserType' and 'UserDetails'
Run Code Online (Sandbox Code Playgroud)
那么,如何比较来自两个不同枚举的两个值?
尝试比较他们的名字
if(UserType.USER.name().equals(UserDetails.USER.name())){
return true;
}
Run Code Online (Sandbox Code Playgroud)
阅读其他答案后,我决定给出更详细的答案。我必须同意这样的解决方案还不够好,因为它不是关于枚举 - 它是关于字符串比较。枚举可能会被更改,并且一切都将无法正常工作。好的。我认为可能有更好的解决方案 - 当然:
enum UserType {
USER,
EMPLOYER;
public boolean isLike(UserDetails details) {
switch (this) {
case USER:
return details == UserDetails.USER;
case EMPLOYER:
return details == UserDetails.EMPLOYER;
}
return false;
}
}
enum UserDetails {
USER,
EMPLOYER;
}
if(UserType.USER.isLike(UserDetails.USER)){
// do something
}
Run Code Online (Sandbox Code Playgroud)
所以我们看到,没有比重写代码并只制作一个更好的决定了enum。但一切都取决于问题:
Java 中的enum是一个class,尽管是一种稍微特殊的 class。一个类定义了一个类型。
除非通过继承或接口相关,否则不能比较不同类型的相等性。AString不能等于 aLocalDate不能等于 a DataSource。
同样, enum 的对象UserType不能等于 enum 的对象UserDetails。苹果与橙子,根据定义不相等。因此,从技术上讲,您的问题毫无意义。
某些枚举类碰巧在其某些常量上共享名称这一事实没有意义,您的两个枚举共享名称USER或EMPLOYER. Month与 Java 捆绑在一起的枚举定义了一个名为 的常量APRIL。我可能会使用一个名为 的对象定义另一个枚举APRIL。但这并不能使它们相等。
问这个问题表明你的设计有问题。如果已经在 Stack Overflow 上解决了该设计问题,也许您应该就该设计问题发布另一个问题。正如Kayaman所评论的,您的问题似乎是一个XY 问题。
建议您的其他答案:
……被误导了。这些方法违反了 Java 中枚举的目的,即提供在编译时已知的某些值的类型安全标识。
String对象而不是枚举。这两种情况都是脆弱的,如果您对一个枚举进行更改而不匹配另一个,则会导致运行时失败。在这两种情况下,您都失去了枚举的用处,将枚举转换为字符串或int.
| 归档时间: |
|
| 查看次数: |
612 次 |
| 最近记录: |