1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
<html>
<head>
<title>
Handbuch der Java-Programmierung, 5. Auflage
</title>
</head>
<body>
<a name="startofbody"></a>
<script language="JavaScript" src="hjp4lib.js">
</script>
<script language="JavaScript">
installKbdHandler("97,#startofbody;101,#endofbody;116,cover.html;122,k100003.html;115,search.html;105,index.html;100,JDKDOCS;112,APIDOCS;104,k100271.html;106,k100271.html;107,k100273.html;108,k100279.html");
</script>
<table border=0 cellpadding=0 cellspacing=1 width="100%">
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100271.html"> << </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100271.html"> < </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100273.html"> > </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100279.html"> >> </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
<td align="right">Kapitel 43 - Reflection
</table>
<hr>
<!-- Section -->
<a name="sectlevel2id043001"></a>
<h2>43.1 Einleitung </h2>
<hr>
<ul>
<li><a href="k100272.html#sectlevel2id043001">43.1 Einleitung</a>
</ul>
<hr>
<p>
Bei der Entwicklung des JDK 1.1 sahen sich die Entwickler mit einer
Schwäche von Java konfrontiert, die die Entwicklung bestimmter
Typen von Tools und Bibliotheken unmöglich machte: der statischen
Struktur von Klassen und Objekten. Um ein Objekt anzulegen, eine seiner
Methoden aufzurufen oder auf eine seiner Membervariablen zuzugreifen,
mußte der Code der Klasse zur <i>Compilezeit</i> bekannt sein.
Während dies für die meisten gewöhnlichen Anwendungen
kein Problem darstellt, ist es für die Entwicklung generischer
Werkzeuge und hochkonfigurierbarer Anwendungen, die durch PlugIns
erweiterbar sind, unzureichend. Insbesondere die Entwicklung der Beans-
und Serialisierungs-APIs war mit den in der Version 1.0 verfügbaren
Spracheigenschaften nicht möglich.
<p>
Benötigt wurde vielmehr die Möglichkeit, Klassen zu laden
und zu instanzieren (auch mit parametrisierten Konstruktoren), ohne
dass bereits zur Compilezeit ihr Name bekannt sein mußte. Weiterhin
sollten statische oder instanzbasierte Methoden aufgerufen und auf
Membervariablen auch dann zugegriffen werden können, wenn ihr
Name erst zur Laufzeit des Programms bekannt ist.
<p>
Gesucht wurde also ein Mechanismus, der diese normalerweise vom Compiler
angeforderten Fähigkeiten des Laufzeitsystems auch »normalen«
Anwendungen zur Verfügung stellte. Mit dem Reflection-API des
JDK 1.1 wurde eine Library-Schnittstelle geschaffen, die alle erwähnten
Fähigkeiten (und noch einige mehr) implementiert und beliebigen
Anwendungen als integralen Bestandteil der Java-Klassenbibliothek
zur Verfügung stellt. Erweiterungen am Sprachkern waren dazu
nicht nötig.
<p>
Wir wollen uns in diesem Kapitel die wichtigsten Eigenschaften des
Reflection-APIs ansehen und ein paar nützliche Anwendungen vorstellen.
Die als <a name="ixa103161"><i>Introspection</i></a> bezeichneten
Erweiterungen für die Beans-Behandlung werden in <a href="k100279.html#kapitelbeans">Kapitel 44</a>
behandelt.
<hr>
<table border=0 cellpadding=0 cellspacing=1 width="100%">
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage, Addison
Wesley, Version 5.0.1
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100271.html"> << </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100271.html"> < </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100273.html"> > </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100279.html"> >> </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
<td align="right">© 1998, 2007 Guido Krüger & Thomas
Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
</table>
<a name="endofbody"></a>
</body>
</html>
|