Bazı kodları çalıştırmak için anonim bir iç sınıf kullanırken Java'da Özel Durum Saydamlığı elde etmenin en iyi yolu nedir?Anonim İç Sınıf İçerisindeki İşaretli İstisnalar Atma
Gerçek kodda gördüğüm sık bir desen, belirli bir kod için bazı bağlamları belirtmek için bazı sözde Çalışabilir tip arabirim kullanıyor. JDK'da düşünebileceğim en iyi örnek, java.security.PrivilegedExceptionAction.
try {
boolean success = AccessController.doPrivileged(
new PrivilegedExceptionAction<Boolean>() {
@Override
public Boolean run() throws Exception {
// do something
// read file
FileInputStream fileInputStream =
new FileInputStream(new File("someFile"));
return true;
}
}
);
} catch (PrivilegedActionException e) {
if (e.getCause() instanceof FileNotFoundException) {
// handle IO exception
} else {
// impossible no other checked exception
}
}
olsa kod açıkça iç kod yalnızca bulunmayan bir dosya atar görebilirsiniz, ama arayan istisnası aslında atılır habersiz olduğu gibi kontrol ettik istisnalar faydalarını kaybetti okuma. Ortak bir hata, yeni bir istisna atmak için kodun anonim bir iç sınıfa tanıtılması ve kodun bu istisnayı ele almak için zorlayamayacağı olacaktır.
İstediğim şey, aşağıdaki gibi bir şeydir, bir dil değişikliği olmadan erişilebilen bu davranış şeklidir?
public interface PrivilegedExceptionAction<T,V... extends Throwable>
{
public T run() throws V;
}
Anonim iç sınıfların genel olarak kötü bir fikir olduğunu düşünüyorum; çünkü bunlar çoğunlukla yeniden kullanılamaz veya genişletilemez. Ama bu başka bir nedendir. Ben de herhangi bir cevapla ilgileniyorum. – user949300
http://blogs.sun.com/briangoetz/entry/exception_transparency_in_java ben proje lambda altında Brian'ın önerisini gördük – alexsmail
üzerinde bir göz atın, ne yazık ki bu 6 – bluphoenix