小编Ste*_*e K的帖子

使用orElseThrow时出现循环接口错误

使用Guava's ClassPath我正在尝试初始化位于特定包中的类,但我想使用构造函数进行初始化,因为它不会传播异常.所以这就是我为获得构造函数而设计的:

ClassPath.from(classLoader).getTopLevelClasses("test.package").stream()
    .map(ClassPath.ClassInfo::load)
    .map(Class::getConstructors)
    .map(Arrays::stream)
    .map(constructorStream -> constructorStream
        .filter(constructor -> constructor.getParameterCount() == 0)
        .findAny()
        .orElseThrow(RuntimeException::new)
    );
Run Code Online (Sandbox Code Playgroud)

但是,这只是在简单地说明Cyclic接口时在InteliJ中给出错误.我想我知道Cyclic接口是什么,但我不确定为什么会导致这个错误.据我所知,只要返回类型是已知的(orElseThrow在这种情况下它具有返回值Constructor<?>),那么抛出未经检查的异常应该没问题.如果我使用orElse(null)那么错误消失了.这里发生了什么以及如何抛出我想抛出的RuntimeException?

java lambda guava java-8

8
推荐指数
1
解决办法
692
查看次数

Java8:有没有办法从类方法引用中获取实例方法引用?

例如,如果我有这样的界面:

public interface FooBar<A, B> {
    B foo(A a);

    B bar(A a);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法采用类级方法引用,FooBar::bar并获取实例方法引用?

即.如果我有

FooBar myFooBarInstance;
BiFunction<FooBar<A, B>, A, B> barFunction = FooBar::bar;
Run Code Online (Sandbox Code Playgroud)

是否有任何简单的方法来获得一个Function<A,B>与我定义的内容相匹配的实例

Function<A, B> myBarFunction = myFooBarInstance::bar;
Run Code Online (Sandbox Code Playgroud)

java java-8

6
推荐指数
1
解决办法
525
查看次数

标签 统计

java ×2

java-8 ×2

guava ×1

lambda ×1