Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java 8 Lambda function that throws exception?

I know how to create a reference to a method that has a String parameter and returns an int, it's:

Function<String, Integer> 

However, this doesn't work if the function throws an exception, say it's defined as:

Integer myMethod(String s) throws IOException 

How would I define this reference?

like image 537
Rocky Pulley Avatar asked Aug 12 '13 23:08

Rocky Pulley


1 Answers

You'll need to do one of the following.

  • If it's your code, then define your own functional interface that declares the checked exception:

    @FunctionalInterface public interface CheckedFunction<T, R> {    R apply(T t) throws IOException; } 

    and use it:

    void foo (CheckedFunction f) { ... } 
  • Otherwise, wrap Integer myMethod(String s) in a method that doesn't declare a checked exception:

    public Integer myWrappedMethod(String s) {     try {         return myMethod(s);     }     catch(IOException e) {         throw new UncheckedIOException(e);     } } 

    and then:

    Function<String, Integer> f = (String t) -> myWrappedMethod(t); 

    or:

    Function<String, Integer> f =     (String t) -> {         try {            return myMethod(t);         }         catch(IOException e) {             throw new UncheckedIOException(e);         }     }; 
like image 112
jason Avatar answered Sep 18 '22 05:09

jason