У меня есть ситуации, подобные следующие:Handling нового исключения в анонимном внутреннем классе
/** Get a list of records */
public ArrayList<Record> foo() throws BazException{
// Create the list
static ArrayList<Record> records = new ArrayList<Record>();
// Use MyLibrary to load a list of records from the file
String str = SomeoneElsesLibrary.loadData(new File("mydata.dat"), new DataLoader(){
// will be called once for each record in the file
String processRecord(Record r){
// if there's no "bar", invalid record
if(! r.hasField("bar")){
throw new BazException();
}
records.add(r);
}
});
return records;
}
Очевидно, что это не работает, потому что SomeoneElsesLibrary
понятия не имеет, что такое BazException
есть. Я также не могу сказать processRecord() throws BazException
, потому что тогда прототип больше не будет соответствовать. Я начинаю думать, что моя общая структура для этой реализации неверна. (Я оправляюсь от приступов Node.JS и должен переучиться примерно большинство шаблонов Java.) Как бы я реструктурировал свой код, чтобы сделать его более идиоматической Java?
Псевдокод в порядке, или даже просто описание. Кроме того, не чувствуйте, что вам нужно использовать анонимный внутренний класс, как я это делал в первый раз; Я просто ищу «способ Java» для этого.
Не можете ли вы объявить 'BazException' как непроверенный? –
Есть (хакерские) способы бросить исключения, которые не объявлены в предложении throws – Eric
Есть ли в библиотеке Исключение, которое может обернуть ваше собственное, поскольку это будет «причиной»? –