Lambda的未经检查的ThrowingSupplier

时间:2019-07-06 14:03:20

标签: java

我如何编写一个ThrowingSupplier并使用未经检查的方法来替换这部分代码?我真的不知道如何从它开始,应该是接口还是类。

void

我想得到的是类似的东西

public class UserDao {
    @Insert
    long insert(User user);

    @Update
    int update(User user);

    @Query("SELECT id FROM user WHERE ROWID = :rowid")
    int getIdFromRowid(long rowid);

    // …
}

任何想法应该是什么样子?我不确定是应该尝试编写的接口还是类,但是我无法创建未经检查的静态方法,也不会创建该方法的新实例。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,这就是您想要的:

public class ThrowingSupplier {
    public static <T> Supplier<T> unchecked(Callable<T> callable) {
        return () -> {
            try {
                return callable.call();
            }
            catch (Exception e) {
                throw new UndeclaredThrowableException(e);
            }
        };
    }

    // example usage:
    public static void main(String[] args) {
        DataSource dataSource = null;
        Connection connection = ThrowingSupplier.unchecked(dataSource::getConnection).get();
    }
}