是否将Scala案例对象用于Java枚举?

是否将Scala案例对象用于Java枚举?,java,scala,enums,dry,scala-java-interop,Java,Scala,Enums,Dry,Scala Java Interop,假设我有以下目标: 为了避免重复,我想在Java中使用这些CaseObjs.Male和.Female作为类似枚举的数据结构 换句话说,我希望在Java中使用这些case对象,而不是创建一个新的Java枚举来复制代码 我可以这样做吗?你是说你想索引出一个封闭类的所有子类?那我想我会帮你的。确保实现假定该类的所有子类都直接继承case对象。如果这些子级不需要特定的实现,也可以使用scala.Enumeration。简短回答:否。另请参阅 据介绍,实现互操作性的最佳方法是用Java声明枚举。我没有找到

假设我有以下目标:

为了避免重复,我想在Java中使用这些CaseObjs.Male和.Female作为类似枚举的数据结构

换句话说,我希望在Java中使用这些case对象,而不是创建一个新的Java枚举来复制代码


我可以这样做吗?

你是说你想索引出一个封闭类的所有子类?那我想我会帮你的。确保实现假定该类的所有子类都直接继承case对象。如果这些子级不需要特定的实现,也可以使用scala.Enumeration。

简短回答:否。另请参阅

据介绍,实现互操作性的最佳方法是用Java声明枚举。我没有找到任何理由相信从那以后情况已经改变了


使用不同的Scala变体会使您的Java代码看起来很糟糕,而使用Scala中的Java枚举则是直截了当的。

可能的重复您知道宏是否是唯一的方法吗?我很感激你的回答,但是,我对宏一无所知,所以根据上面的例子,为我的Person-trait实现一个java枚举可能是一个不错的选择,因为我对宏缺乏了解。我认为在大多数情况下,你可以使用密封的trait+case对象解决方案,而宏是不需要的。我认为问题的互操作方面是最有趣的部分。仔细阅读后,我认为这是一个选择。据我所知,宏解决方案不会使您的Java代码看起来更好。我想知道您对我的答案有什么不喜欢的地方,并投了反对票,Kevin:“您不需要任何宏知识来使用枚举,您可以像往常一样引用Java代码生成的Seq。如果您需要任何帮助,我可以确切地告诉您如何处理枚举。
object CaseObjs {
  trait Person
  case object Female extends Person
  case object Male extends Person
}