Jaki jest najlepszy sposób na uzyskanie praktyka Exception Przejrzystość w Javie przy użyciu anonimową klasę wewnętrzną, aby uruchomić jakiś kod.rzucanie Sprawdzone Wyjątki od zajęć Anonymous wewnętrzne
Częstym wzór, który widziałem w czasie rzeczywistym za pomocą kodu jest jakiś interfejs pseudo typu Runnable określić pewien kontekst dla jakiegoś określonego kodu. Najlepszym przykładem, jaki mogę wymyślić w JDK, jest 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
}
}
Nawet odczytaniu kodu można wyraźnie zobaczyć kod wewnętrzny rzuca tylko plik nie został znaleziony, ale utracone korzyści sprawdzonych wyjątków rozmówca nie zdaje sobie sprawy z tego, co jest faktycznie rzucony wyjątek. Powszechnym błędem byłoby wprowadzenie kodu do anonimowej klasy wewnętrznej, która spowodowałaby nowy wyjątek, a kod nie zmuszałby cię do obsługi tego wyjątku.
Co chcę jest coś, co jest poniżej, jest to rodzaj zachowania osiągalne bez zmiany języka?
public interface PrivilegedExceptionAction<T,V... extends Throwable>
{
public T run() throws V;
}
Uważam, że anonimowe klasy wewnętrzne są generalnie złym pomysłem, głównie dlatego, że nie można ich ponownie wykorzystać ani rozszerzyć. Ale to kolejny powód. Jestem też zainteresowany każdą odpowiedzią. – user949300
Spójrz na http://blogs.sun.com/briangoetz/entry/exception_transparency_in_java – alexsmail
Widziałem propozycję Briana pod lambda projektu, niestety nie jest dostępny w Java 6 – bluphoenix