2017-05-18 7 views
0

私は、Tripという2つのゲッターメソッドを持つTripというカスタムクラスを公開しています。 私はArrayListにいくつかのトリップオブジェクトを追加します。Java Arraylistがget()のメソッド/フィールドを失う

public ArrayList<Trip> routeIndex; 

次のコードでこれらのトリップオブジェクトの1つをコールバック、私がアクセスエラーが発生します。

Trip abc = routeIndex.get(0); 
    for (Field field : abc.getClass().getDeclaredFields()) { 
     field.setAccessible(true); 
     String name = field.getName(); 
     field.setAccessible(true); 
     Object value = field.get(abc); 
     System.out.printf("Field name: %s, Field value: %s%n", name, value); 
    } 

これは、オブジェクトの値の行に次のエラーです:

unreported exception java.lang.IllegalAccessException; must be caught or declared when thrown 

私は間違っているかもしれない任意のアイデア?

+0

これは* checked exception *と呼ばれます。これらの呼び出しの周りに 'try/catch'ブロックをラップする必要があります。 –

+0

また、振る舞いを変更せずにアプリケーションをコンパイルできるようにするには、関数に対して 'throws'を宣言することもできます。 – ktbiz

+0

"Java Arraylistがタイトルのget()"メソッド/フィールドを失う "コンパイルエラーが発生しました" –

答えて

1

filed.get(Object obj)IllegalAccessExceptionを投げるので、あなたはそれを処理する必要がありますので、ブロックをfiled.get(abc)の周りに追加する必要があります。

だからあなただけのObject value = field.get(abc);

Object value = null; 
try { 
    value = field.get(abc); 
} catch (IllegalAccessException e) { 
    e.printStackTrace(); 
} 

に変更を必要とし、それが正常に動作します。