tutorial spark sources receive foreachrdd example data context scala case-class

spark - ¿Cómo obtengo un objeto de caso Scala de Java?



spark streaming python (3)

Creé una jerarquía de objetos de casos en Scala que se parece a lo siguiente:

package my.awesome.package sealed abstract class PresetShapeType(val displayName: String) case object AccelerationSensor extends PresetShapeType("Acceleration Sensor") case object DisplacementSensor extends PresetShapeType("Displacement Sensor") case object ForceSensor extends PresetShapeType("Force Sensor") case object PressureSensor extends PresetShapeType("Pressure Sensor") case object StrainSensor extends PresetShapeType("Strain Sensor")

También tengo un fragmento de código Java en el que me gustaría acceder a PressureSensor , pero el siguiente no funciona:

package my.awesome.package.subpackage; import my.awesome.package.PressureSensor; // Do some stuff, then... DVShape newshape = DVShapeFactory.createPresetShape(PressureSensor, new Point3f(0,0,0));

Entonces, ¿cómo hago referencia al objeto Case de PressureSensor desde Java? Descompilé el código de bytes para las clases PressureSensor y PressureSensor$ , lo que arrojó lo siguiente:

Compiled from "DVShapeFactory.scala" public final class org.nees.rpi.vis.PressureSensor extends java.lang.Object{ public static final java.lang.Object productElement(int); public static final int productArity(); public static final java.lang.String productPrefix(); public static final int $tag(); public static final java.lang.String displayName(); } Compiled from "DVShapeFactory.scala" public final class org.nees.rpi.vis.PressureSensor$ extends org.nees.rpi.vis.PresetShapeType implements scala.ScalaObject,scala.Product,java.io.Serializable{ public static final org.nees.rpi.vis.PressureSensor$ MODULE$; public static {}; public org.nees.rpi.vis.PressureSensor$(); public java.lang.Object readResolve(); public java.lang.Object productElement(int); public int productArity(); public java.lang.String productPrefix(); public final java.lang.String toString(); public int $tag(); }

Pero eso no dio ninguna gran idea.


Esto sigue siendo un hack, pero en mi opinión un poco más legible en Java. Simplemente agregue un método para devolver explícitamente la referencia a la instancia de singleton (se muestra como un método estático en la clase):

sealed abstract class PresetShapeType(val displayName: String) case object AccelerationSensor extends PresetShapeType("Acceleration Sensor") { def instance = this } case object DisplacementSensor extends PresetShapeType("Displacement Sensor") { def instance = this } case object ForceSensor extends PresetShapeType("Force Sensor") { def instance = this } case object PressureSensor extends PresetShapeType("Pressure Sensor") { def instance = this } case object StrainSensor extends PresetShapeType("Strain Sensor") { def instance = this }

Y luego en Java:

import my.awesome.package.PressureSensor; DVShape newshape = DVShapeFactory.createPresetShape(PressureSensor.instance(), new Point3f(0,0,0));


desde Java, diga:

my.awesome.package.PressureSensor$.MODULE$


PressureSensor$.MODULE$ debería darle la instancia del objeto de caso.