使用Guava's ClassPath
特定のパッケージにあるクラスを初期化しようとしていますが、コンストラクタを使用して例外を伝播しないように初期化します。しかし、これは単に巡回インタフェースを述べるInteliJでエラーが発生しますorElseThrowを使用したときの循環インタフェースエラー
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)
);
:だからこれは私がコンストラクタを取得するために働いたものです。私はCyclicインターフェイスが何であるか知っていると思うが、なぜこのエラーが発生するのか分からない。私の知る限り、戻り値の型がわかっている限り(orElseThrow
の場合は戻り値がConstructor<?>
である)、チェックされていない例外をスローすると問題ありません。 orElse(null)
を使用するとエラーが消えます。ここで何が起こっているのですか?投げたいRuntimeExceptionをどうやって投げることができますか?
'orElseThrow'の接頭辞に特定の型を付けるとどうなりますか? '。 orElseThrow(RuntimeException :: new)' –
RealSkeptic
エラーは削除され、意図したとおりに動作します。どうして?提供された例外によって 'X'は既に定義されていてはなりませんか? – danthonywalker
私はあなたが型推論を非常に厳密にしないコンパイラを使用していると思います。 Eclipseでは明示的な型引数なしで動作します。 Oracleの 'javac'では、報告されていない例外について文句を言います。 – RealSkeptic