Cloud.orbit.exception.UncheckedException: no sé cómo manejar el estado

¿Cuál es el equivalente de kotlin de esta class de Java?

public class StatefulActor extends AbstractActor<StatefulActor.State> implements Some { public static class State { String lastMessage; } } 

Lo intenté:

 class HelloActor: AbstractActor<HelloActor.State>(), Hello { inner class State { var lastMessage: String? = null } 

pero da como resultado Cloud.orbit.exception.UncheckedException: Don't know how to handle state

¿Cuál es el equivalente de kotlin de esta class de Java?

Su código de Kotlin y Java difiere de dos maneras, la relación del State con StatefulActor y la capacidad del State para permitir la creación de subclasss.

Para State lo que quiere es una class anidada , no una class interna , en términos de Kotlin. El primero corresponde al modificador static en Java, mientras que el segundo es como una class interna sin el modificador static .

Entonces, para la equivalencia con el código de Java que proporcionó, debería descartar la palabra key inner .

Cloud.orbit.exception.UncheckedException: no sé cómo manejar el estado

En cuanto a su problema Orbit, puede intentar lo siguiente. Esto también explicará por qué la subsorting es un problema:

 // compile and run with cloud.orbit:orbit-runtime:1.2.0 import cloud.orbit.actors.runtime.AbstractActor import cloud.orbit.actors.Actor import cloud.orbit.actors.Stage import cloud.orbit.concurrent.Task class HelloActor: AbstractActor<HelloActor.ActorState>(), Hello { override fun sayHello(greeting: String): Task<String> { val lastMessage = state().lastMessage state().lastMessage = greeting return Task.fromValue(lastMessage) } class ActorState { var lastMessage: String? = null } } interface Hello : Actor { fun sayHello(greeting: String): Task<String> } fun main(args : Array<String>) { val stage = Stage.Builder().clusterName("orbit-helloworld-cluster").build() stage.start().join() stage.bind() val helloActor = Actor.getReference(Hello::class.java, "0"); var response = helloActor .sayHello("Welcome to orbit 1").join() println(response) // should print null response = helloActor .sayHello("Welcome to orbit 2").join() println(response) // should print "Welcome to orbit 1" stage.stop().join() } 

Observe que la class anidada del actor se llama ActorState y no State como en su pregunta. Cuando llamé estado de la class de estado del Actor, recibí un error similar:

 cloud.orbit.exception.UncheckedException: Don't know how to handle state: HelloActor$State... Caused by: cloud.orbit.exception.UncheckedException: cloud.orbit.exception.UncheckedException: Don't know how to handle state: HelloActor$State Caused by: cloud.orbit.exception.UncheckedException: Don't know how to handle state: HelloActor$State Caused by: cloud.orbit.exception.UncheckedException: java.lang.ClassNotFoundException: HelloActor$ActorState 

Pero cuando utilicé el nombre de class nested HelloActor.ActorState , funciona.

Esto se debe a que por defecto todas las classs en Kotlin están cerradas (es decir, son final en términos de Java).

Por defecto, todas las classs en Kotlin son finales, lo que corresponde a Effective Java, Item 17: Design and document for inheritance o de lo contrario lo prohíben.

Mientras está en órbita 1.2.0, el código (si no usa el nombre especial ActorState ) intenta subclasificar su class State y luego crear una instancia. Esto no funcionará si vas con la extensión pnetworkingeterminada de Kotlin cerrada.

Si desea usar su propio nombre para la class de estado del actor, debe declararlo como open . p.ej

 class HelloActor: AbstractActor<HelloActor.State>(), Hello { override fun sayHello(greeting: String): Task<String> { val lastMessage = state().lastMessage state().lastMessage = greeting return Task.fromValue(lastMessage) } open class State { var lastMessage: String? = null } } 
  • Prueba de la aplicación Android Kotlin: Mockito con Dagger inyecta nulo
  • Inicializar un RecyclerView con Android Data Binding en Kotlin está arrojando un error. ¿Qué estoy haciendo mal?
  • ¿Cuáles son las diferencias entre el Código 1 y el Código 2 en Kotlin?
  • error al usar 'npm start' con la aplicación creada por 'create-react-kotlin-app'
  • Kotlin: declara una class genérica con un tipo param que es genérico
  • ¿Cómo cambio el text del button y la function en Android?
  • Android kotlin onTouchListener quiere que anule performClick ()
  • Clase de datos kotlin + validation de frijol jsr 303
  • Referencia de propiedad anidada Kotlin
  • Cómo evitar la cobertura parcial con campos tardíos en Kotlin
  • Cómo usar anko spinner?