teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

リファイン

2015/07/01 06:37

投稿

argius
argius

スコア9396

answer CHANGED
@@ -1,7 +1,9 @@
1
- 実行時に存在するかどうかわからないクラスやメソッドを実行するには、 **リフレクション**を使用します。
1
+ 実行時に存在するかどうかわからないクラスやメソッドを実行するには、 **リフレクション** を使用します。
2
2
  正確には、ソースがあるかどうかではなく、クラスがクラスパスに設定されているかどうか、です。
3
3
 
4
4
 
5
+ ※以下のソースではどんな例外がスローされるかが分かるように個別に`catch`ブロックを設けていますが、必要が無ければ分けなくてもOKです。
6
+
5
7
  - Hoge.java
6
8
  ```lang-java
7
9
  package local;
@@ -21,22 +23,21 @@
21
23
  Object o;
22
24
  try {
23
25
  o = c.newInstance();
24
- } catch (InstantiationException|IllegalAccessException e) {
26
+ } catch (InstantiationException | IllegalAccessException e) {
25
27
  e.printStackTrace();
26
28
  return;
27
29
  }
28
30
  Method m;
29
31
  try {
30
32
  m = c.getDeclaredMethod("hage", int.class);
31
- } catch (NoSuchMethodException |SecurityException e) {
33
+ } catch (NoSuchMethodException | SecurityException e) {
32
34
  e.printStackTrace();
33
35
  return;
34
36
  }
35
37
  try {
36
38
  m.invoke(o, 3); // => Huga.hage(), arg=3
37
- } catch (IllegalAccessException |IllegalArgumentException |InvocationTargetException e) {
39
+ } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
38
40
  e.printStackTrace();
39
- return;
40
41
  }
41
42
  }
42
43
 
@@ -64,7 +65,7 @@
64
65
  ```lang-java
65
66
  package local;
66
67
 
67
- public interface IHuga {
68
+ public interface IHuga { // Hugaクラスは これを implements する
68
69
 
69
70
  public void hage(int i);
70
71
 
@@ -75,9 +76,10 @@
75
76
  ```lang-java
76
77
  IHuga o;
77
78
  try {
78
- o = (IHuga)Class.forName("local.Huga").newInstance(); // ここだけ例外をチェックすれば良い
79
+ o = (IHuga)Class.forName("local.Huga").newInstance();
79
- o.hage(3);
80
- } catch (InstantiationException |IllegalAccessException |ClassNotFoundException e) {
80
+ } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
81
81
  e.printStackTrace();
82
+ return;
82
83
  }
84
+ o.hage(3); // インターフェイスを介しての実行時にはリフレクションのエラーは発生しない
83
- ```
85
+ ```