¿Hay una norma de clase biblioteca java8 que significa "posiblemente con excepción" de la misma manera como medios java.util.Optional "posiblemente nula"?

Jacey Squires:

Tengo clases llamadas digamos CalculationOutcomey FileHashOutcome. Sus constructores tienen (ActualResult, Throwable)argumentos, y al final de una cadena de CompletionStages tengo handle(XxxOutcome::new).

Se podría hacer más clara las intenciones y ahorrar algo repetitivo si podía escribir por ejemplo PossiblyWithError<FileHash>.

Editar: gente que pide, por ejemplo, el código ...

class FileHashOutcome {
  private final String hash;
  private final Throwable throwable;
  FileHashOutcome(String hash, Throwable throwable){
    // Usual assignments
  }
}

CompletionStage<FileHashOutcome> future =
   SomeExternalLibrary.calculateHash(file) 
   // ...It's a CompletionStage<String> at this stage...
   .handle(FileHashOutcome::new);

// Then I pass `future` to a service that 
// will execute it and pass back the result asynchronously

Para ser más específicos, es un actor dentro de Akka, y yo estoy pidiendo la infraestructura para tubería la parte posterior resultado en el actor como un mensaje.

Editar: sugerencias de que CompletableFuturepodría hacer el trabajo ... Sí, buen punto, que representa exactamente lo que necesita ser representado. Y es un poco de olor a código para implementar su propio áspera y listo futuro, entonces se envuelve en un futuro java8.

Hay algunos aros para saltar a través dependiendo de si usted tiene acceso a la "envoltura" del futuro. Si estás dentro de una thenApplycontinuación que está "dentro" de la envolvente y que no lo saben. Y la infraestructura de Akka "tira a la basura" el sobre y sólo devuelve el resultado (y no devuelve nada si no fue una excepción, que es una de las razones principales por las que quería coger y envolver esa excepción al final de la CompletionStagecadena). Por supuesto, ya he creado la CompletionStage, podía aferrarse a él en una variable miembro hasta que la infraestructura me dio un codazo que había completado.

Steve:

Por @marstran, el nombre usual para esta clase es Try .

Scala tiene una clase tal en su biblioteca estándar: https://www.scala-lang.org/api/2.9.3/scala/util/Try.html

El mismo se puede hacer en Java, pero no es una parte de la biblioteca estándar: https://dzone.com/articles/why-try-better-exception-handling-in-java-with-try

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=99043&siteId=1
Recomendado
Clasificación