私は自分のAndroidアプリケーションの例外処理戦略を考え出そうとしています(ただし、これはどのJavaアプリにも当てはまる可能性があります)。たとえば、メモ帳アプリケーションの例でdelete()ContentProvider関数を見ています。
public int delete(Uri uri, String where, String[] whereArgs) {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
int count;
switch (sUriMatcher.match(uri)) {
case NOTES:
count = db.delete(NOTES_TABLE_NAME, where, whereArgs);
break;
case NOTE_ID:
String noteId = uri.getPathSegments().get(1);
count = db.delete(NOTES_TABLE_NAME, NoteColumns._ID + "=" + noteId
+ (!TextUtils.isEmpty(where) ? " AND (" + where + ')' : ""), whereArgs);
break;
default:
throw new IllegalArgumentException("Unknown URI " + uri);
}
getContext().getContentResolver().notifyChange(uri, null);
return count;
}
Uri
がnullの場合はどうなりますか?またはgetContext
()?またはgetContentresolver
()?
ここは例外をキャッチする場所ではないという結論に達しましたContentResolver
が、アプリが意味のあるエラーメッセージを表示できるように、例外を再スローするか、新しい例外をスローする必要があります。
次のようなものは悪いアプローチ(やり過ぎ)でしょうか?NullPointerException
(例のように)より一般的な方法で処理するために、sなどを一番上までバブルさせる必要がありますか?
public int delete(Uri uri, String where, String[] whereArgs)
throws SQLiteException, IllegalArgumentException, NotifyException {
if (null != mOpenHelper) {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
if (null != db) {
if (null != uri) {
int count = 0;
switch (sUriMatcher.match(uri)) {
case NOTES:
count = db.delete(NOTES_TABLE_NAME, where, whereArgs);
break;
case NOTE_ID:
String noteId = uri.getPathSegments().get(1);
count = db.delete(NOTES_TABLE_NAME, NoteColumns._ID + "=" + noteId
+ (!TextUtils.isEmpty(where) ? " AND (" + where + ')' : ""), whereArgs);
break;
default:
throw new IllegalArgumentException("Unknown URI " + uri);
}
if (null != getContext()) && (null != getContentResolver()) {
getContext().getContentResolver().notifyChange(uri, null);
} else {
throw NotifyException("Failed to notify change");
}
return count;
} else {
throw new IllegalArgumentException("Must provide URI");
}
} else {
throw new SQLiteException("Failed to get database");
}
} else {
throw new SQLiteException("Invalid database helper");
}
}
免責事項:このコードはコンパイルされない可能性があります!それは一例です。
確かに読みにくいです!適切なバランスが何であるかわからないので、助けが必要です!。
更新:Androidの推奨プラクティス(http://source.android.com/source/code-style.html#java-language-rulesを参照)を読みましたが、さらに混乱しました。