16.11.2013 Aufrufe

Programmieren in Java - HostFiXX.de

Programmieren in Java - HostFiXX.de

Programmieren in Java - HostFiXX.de

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Programmieren</strong> <strong>in</strong> <strong>Java</strong><br />

Class besitzt Metho<strong>de</strong>n, die hauptsächlich zur Beschreibung <strong>de</strong>r Schnittstellen e<strong>in</strong>er<br />

Klasse und zur E<strong>in</strong>ordnung <strong>in</strong> die Klassenhierarchie dienen. Diese abstrakte und<br />

dynamische Dokumentation von Klassen wird als Reflection bezeichnet 109 .<br />

Das folgen<strong>de</strong> Programmstück 110 testet Objekte systematisch durch:<br />

import java.util.*;<br />

class CheckClassTyp<br />

{<br />

public static void ma<strong>in</strong>(Str<strong>in</strong>g args[])<br />

{<br />

Class observer = Observer.class;<br />

Class observable = Observable.class;<br />

Class array = (new <strong>in</strong>t[2][3][4]).getClass();<br />

Class primitive = Integer.TYPE;<br />

checkClassType(observer);<br />

checkClassType(observable);<br />

checkClassType(array);<br />

checkClassType(primitive);<br />

}<br />

static void checkClassType(Class c)<br />

{<br />

Str<strong>in</strong>g name = c.getName();<br />

if (c.isArray())<br />

System.out.pr<strong>in</strong>tln(name + " ist e<strong>in</strong> Array.");<br />

else if (c.isPrimitive())<br />

System.out.pr<strong>in</strong>tln(name + " ist e<strong>in</strong> primitiver Datentyp.");<br />

else if (c.isInterface())<br />

System.out.pr<strong>in</strong>tln(name + " ist e<strong>in</strong> Schnittstelle.");<br />

else<br />

System.out.pr<strong>in</strong>tln(name + " ist e<strong>in</strong>e Klasse.");<br />

}<br />

}<br />

Liegt <strong>de</strong>r Name <strong>de</strong>r Klasse als Class-Objekt vor, kann man zur Laufzeit <strong>de</strong>n voll<br />

qualifizierten Namen über die Metho<strong>de</strong> getName() ausgeben.<br />

import java.util.Date;<br />

class BspName<br />

{<br />

public static void ma<strong>in</strong>(Str<strong>in</strong>g [] args)<br />

{<br />

Date d = new Date();<br />

Class c = d.getClass();<br />

Str<strong>in</strong>g s = c.getName();<br />

System.out.pr<strong>in</strong>tln(s);<br />

System.out.pr<strong>in</strong>tln((new <strong>in</strong>t[2][3][4]).getClass().getName());<br />

}<br />

}<br />

Arrays wer<strong>de</strong>n über getName() mit führen<strong>de</strong>n „[“ kodiert. Je<strong>de</strong> Klammer beschreibt<br />

die Tiefe <strong>de</strong>s Arrays. Nach <strong>de</strong>r Klammer folgt <strong>in</strong> kodierter Form, welchen Typ das<br />

Array speichert. So liefert System.out.pr<strong>in</strong>tln((new <strong>in</strong>t [2] [3] [4] ).<br />

getClass().getName());<strong>de</strong>n Str<strong>in</strong>g „[[[I“. Nimmt das Array Objekte auf, wird dies<br />

mit e<strong>in</strong>em „LKlassenname;“ kodiert. So ergibt (new<br />

Object[3]).getClass().getName() <strong>de</strong>n Str<strong>in</strong>g „[Ljava.lang.Object;“.<br />

109 Die Klasse java.lang.Class ist Basis für Metho<strong>de</strong>n, die Objekte vom Typ Constructor, Method, Field usw.<br />

zurückliefern. Die zugehörigen Klassen s<strong>in</strong>d im Package java.lang.reflect <strong>de</strong>f<strong>in</strong>iert.<br />

110 vgl. pr14220<br />

92

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!