akka.japi.pf.PFBuilder Maven / Gradle / Ivy
/*
* Copyright (C) 2009-2020 Lightbend Inc.
*/
package akka.japi.pf;
/**
* A builder for {@link scala.PartialFunction}.
*
* @param the input type, that this PartialFunction will be applied to
* @param the return type, that the results of the application will have
*/
public final class PFBuilder extends AbstractPFBuilder {
/** Create a PFBuilder. */
public PFBuilder() {}
/**
* Add a new case statement to this builder.
*
* @param type a type to match the argument against
* @param apply an action to apply to the argument if the type matches
* @return a builder with the case statement added
*/
public PFBuilder match(final Class
type, FI.Apply
apply) {
return matchUnchecked(type, apply);
}
/**
* Add a new case statement to this builder without compile time type check of the parameters.
* Should normally not be used, but when matching on class with generic type argument it can be
* useful, e.g. List.class
and (List<String> list) -> {}
.
*
* @param type a type to match the argument against
* @param apply an action to apply to the argument if the type matches
* @return a builder with the case statement added
*/
@SuppressWarnings("unchecked")
public PFBuilder matchUnchecked(final Class type, FI.Apply apply) {
FI.Predicate predicate =
new FI.Predicate() {
@Override
public boolean defined(Object o) {
return type.isInstance(o);
}
};
addStatement(new CaseStatement(predicate, (FI.Apply