回答編集履歴
1
リファイン
test
CHANGED
@@ -1,8 +1,12 @@
|
|
1
|
-
実行時に存在するかどうかわからないクラスやメソッドを実行するには、 **リフレクション**を使用します。
|
1
|
+
実行時に存在するかどうかわからないクラスやメソッドを実行するには、 **リフレクション** を使用します。
|
2
2
|
|
3
3
|
正確には、ソースがあるかどうかではなく、クラスがクラスパスに設定されているかどうか、です。
|
4
4
|
|
5
5
|
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
※以下のソースではどんな例外がスローされるかが分かるように個別に`catch`ブロックを設けていますが、必要が無ければ分けなくてもOKです。
|
6
10
|
|
7
11
|
|
8
12
|
|
@@ -44,7 +48,7 @@
|
|
44
48
|
|
45
49
|
o = c.newInstance();
|
46
50
|
|
47
|
-
} catch (InstantiationException|IllegalAccessException e) {
|
51
|
+
} catch (InstantiationException | IllegalAccessException e) {
|
48
52
|
|
49
53
|
e.printStackTrace();
|
50
54
|
|
@@ -58,7 +62,7 @@
|
|
58
62
|
|
59
63
|
m = c.getDeclaredMethod("hage", int.class);
|
60
64
|
|
61
|
-
} catch (NoSuchMethodException |SecurityException e) {
|
65
|
+
} catch (NoSuchMethodException | SecurityException e) {
|
62
66
|
|
63
67
|
e.printStackTrace();
|
64
68
|
|
@@ -70,11 +74,9 @@
|
|
70
74
|
|
71
75
|
m.invoke(o, 3); // => Huga.hage(), arg=3
|
72
76
|
|
73
|
-
} catch (IllegalAccessException |IllegalArgumentException |InvocationTargetException e) {
|
77
|
+
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
|
74
78
|
|
75
79
|
e.printStackTrace();
|
76
|
-
|
77
|
-
return;
|
78
80
|
|
79
81
|
}
|
80
82
|
|
@@ -130,7 +132,7 @@
|
|
130
132
|
|
131
133
|
|
132
134
|
|
133
|
-
public interface IHuga {
|
135
|
+
public interface IHuga { // Hugaクラスは これを implements する
|
134
136
|
|
135
137
|
|
136
138
|
|
@@ -152,14 +154,18 @@
|
|
152
154
|
|
153
155
|
try {
|
154
156
|
|
155
|
-
o = (IHuga)Class.forName("local.Huga").newInstance();
|
157
|
+
o = (IHuga)Class.forName("local.Huga").newInstance();
|
156
158
|
|
157
|
-
o.hage(3);
|
158
|
-
|
159
|
-
} catch (InstantiationException |IllegalAccessException |ClassNotFoundException e) {
|
159
|
+
} catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
|
160
160
|
|
161
161
|
e.printStackTrace();
|
162
162
|
|
163
|
+
return;
|
164
|
+
|
163
165
|
}
|
164
166
|
|
167
|
+
o.hage(3); // インターフェイスを介しての実行時にはリフレクションのエラーは発生しない
|
168
|
+
|
165
169
|
```
|
170
|
+
|
171
|
+
|