回答編集履歴
1
リファイン
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
|
+
```
|