Package akka.japi

Class JavaPartialFunction<A,​B>

  • All Implemented Interfaces:
    scala.Function1<A,​B>, scala.PartialFunction<A,​B>

    public abstract class JavaPartialFunction<A,​B>
    extends scala.runtime.AbstractPartialFunction<A,​B>
    Helper for implementing a *pure* partial function: it will possibly be invoked multiple times for a single &ldquo;application&rdquo;, because its only abstract method is used for both isDefinedAt() and apply(); the former is mapped to isCheck == true and the latter to isCheck == false for those cases where this is important to know.

    Failure to match is signaled by throwing noMatch(), i.e. not returning normally (the exception used in this case is pre-allocated, hence not that expensive).

    
     new JavaPartialFunction<Object, String>() {
       public String apply(Object in, boolean isCheck) {
         if (in instanceof TheThing) {
           if (isCheck) return null; // to spare the expensive or side-effecting code
           return doSomethingWithTheThing((TheThing) in);
         } else {
           throw noMatch();
         }
       }
     }
     

    The typical use of partial functions from Akka looks like the following:

    
     if (pf.isDefinedAt(x)) {
       pf.apply(x);
     }
     

    i.e. it will first call JavaPartialFunction.apply(x, true) and if that does not throw noMatch() it will continue with calling JavaPartialFunction.apply(x, false).

    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      static class  JavaPartialFunction.NoMatch$  
      static class  JavaPartialFunction.NoMatchException  
      • Nested classes/interfaces inherited from interface scala.PartialFunction

        scala.PartialFunction.AndThen<A extends java.lang.Object,​B extends java.lang.Object,​C extends java.lang.Object>, scala.PartialFunction.Lifted<A extends java.lang.Object,​B extends java.lang.Object>, scala.PartialFunction.OrElse<A extends java.lang.Object,​B extends java.lang.Object>, scala.PartialFunction.Unlifted<A extends java.lang.Object,​B extends java.lang.Object>
    • Method Summary

      All Methods Static Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      B apply​(A x)  
      abstract B apply​(A x, boolean isCheck)  
      <A1 extends A,​B1>
      B1
      applyOrElse​(A1 x, scala.Function1<A1,​B1> default_)  
      boolean isDefinedAt​(A x)  
      static java.lang.RuntimeException noMatch()  
      • Methods inherited from class scala.runtime.AbstractPartialFunction

        andThen, apply$mcDD$sp, apply$mcDF$sp, apply$mcDI$sp, apply$mcDJ$sp, apply$mcFD$sp, apply$mcFF$sp, apply$mcFI$sp, apply$mcFJ$sp, apply$mcID$sp, apply$mcIF$sp, apply$mcII$sp, apply$mcIJ$sp, apply$mcJD$sp, apply$mcJF$sp, apply$mcJI$sp, apply$mcJJ$sp, apply$mcVD$sp, apply$mcVF$sp, apply$mcVI$sp, apply$mcVJ$sp, apply$mcZD$sp, apply$mcZF$sp, apply$mcZI$sp, apply$mcZJ$sp, compose, lift, orElse, runWith, toString
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • JavaPartialFunction

        public JavaPartialFunction()
    • Method Detail

      • noMatch

        public static final java.lang.RuntimeException noMatch()
      • apply

        public abstract B apply​(A x,
                                boolean isCheck)
                         throws java.lang.Exception
        Throws:
        java.lang.Exception
      • isDefinedAt

        public final boolean isDefinedAt​(A x)
      • apply

        public final B apply​(A x)
        Specified by:
        apply in interface scala.Function1<A,​B>
        Overrides:
        apply in class scala.runtime.AbstractPartialFunction<A,​B>
      • applyOrElse

        public final <A1 extends A,​B1> B1 applyOrElse​(A1 x,
                                                            scala.Function1<A1,​B1> default_)
        Specified by:
        applyOrElse in interface scala.PartialFunction<A,​B>
        Overrides:
        applyOrElse in class scala.runtime.AbstractPartialFunction<A,​B>