Guava's ClassPath
Kullanma Belirli bir pakette bulunan sınıfları başlatmaya çalışıyorum, ancak özel durumları yaymadığından başlatıcıyı kullanmak istiyorum.Döngüsel Arabirim kullanırken 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)
);
Ancak bu sadece basitçe Döngüsel arayüz belirten InteliJ bir hata veriyor: Öyleyse bu, kurucular almak için dışarı çalıştı budur. Cyclic arayüzünün ne olduğunu biliyorum, ancak bunun neden bu hataya neden olacağından emin değilim. Geri dönüş türü bilindiği sürece (orElseThrow
için bu durumda Constructor<?>
olarak bir dönüş değeri vardır), işaretlenmemiş bir istisna atmak iyi olmalıdır. orElse(null)
kullanırsam, hata gider. Burada neler oluyor ve atmak istediğim RuntimeException'ı nasıl atabilirim?
Belirli bir türle "orElseThrow" önekini alırsanız ne olur? '. orElseThrow (RuntimeException :: new)' –
RealSkeptic
Hata kaldırıldı ve şimdi amaçlandığı gibi çalışıyor. Neden olsa? "X" zaten sağlanan istisna ile tanımlanmamalıdır? – danthonywalker
Sanırım, tür çıkarımını çok sık yapmayan bir derleyici kullanıyorsunuz. Eclipse'de, açık tip argümanı olmadan çalışır. Oracle'ın javacında, bildirilmemiş bir istisna hakkında şikâyetçi. – RealSkeptic