我知道如何创建一个方法的引用,该方法有一个String参数,返回一个int,它是:

Function<String, Integer>

但是,如果函数抛出异常,这将不起作用,比如它被定义为:

Integer myMethod(String s) throws IOException

我该如何定义这个引用呢?

推荐答案

您需要执行以下操作之一.

  • 如果是你的代码,那么定义你自己的函数接口来声明选中的异常:

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

    并使用它:

    void foo (CheckedFunction f) { ... }
    
  • 否则,将Integer myMethod(String s)包装在不声明判断异常的方法中:

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

    然后:

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

    或者:

    Function<String, Integer> f =
        (String t) -> {
            try {
               return myMethod(t);
            }
            catch(IOException e) {
                throw new UncheckedIOException(e);
            }
        };
    

Java相关问答推荐

使用Java使用fabric.io获取当前部署名称

android Document File. isDirector()返回意外结果

如果您仅同步写操作,Java布尔线程是否安全

gitlab ci不会运行我的脚本,因为它需要数据库连接'

方法没有用正确的值填充数组—而是将数组保留为null,'

为什么我们不能实现两个接口,其中一个接口有相同的签名,其中一个接口有默认的实现在java?'

无法在org. openjfx:javafx—fxml:21的下列变体之间进行 Select

CAMEL 4中的SAXParseException

如何在带有Micronaut的YAML中使用包含特殊字符的字符串作为键

所有 case 一起输入时输出错误,而单独放置时输出正确

为什么JAVA&S清洁器使用链表而不是并发HashSet?

使用Spring Boot3.2和虚拟线程的并行服务调用

Arrays.hashcode(int[])为不同的元素提供相同的散列

Java ArrayList的整数和数组的泛型

如何在Microronaut中将 map 读取为 map

通过Java列表中的某些字段搜索值

具有多个分析模式的复杂分隔字符串的正则表达式

在Java中比较同一多维数组的两个不同的字符串元素

如何使用外部函数从Java中获取C++ struct 的返回值&;内存API

Android上的SQLite:Android.database.SQLite.SQLiteReadOnlyDatabaseException:try 写入只读数据库(代码1032 SQLite_readonly_DBMOVED)