ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
757
757
EMPFEHLEN
-
Aloha, ich habe mal ne frage,
ist es möglich mittels Reflection auf die Werte von Feldern(Instanzvariablen) zuzugreifen?
Beim beschäftigen mit der Api habe ich die Field.getXXX Methoden gefunden, jedoch verstehe ich nicht so ganz wie sie zu benutzen sind und wenn ich testweise versuche einen Wert auszugeben bekomme ich immer nur eine IllegalArgumentException. Hätte da jemand ein kleines Beispiel am besten mit Strings?
Vielen Dank
elmatoBeen there, done that, got the T-Shirt..
-
Hallo elmato,
hab mal auf die schnelle eine Testklasse geschrieben. Was ich feststellen konnte ist, das nur die public deklarierten Elemente ausgegeben werden. Da aber Instanzvariablen in der Regel private deklariert sind, könntest du dir bspw. die Getter und Setter ausgeben lassen, aus denen wären dann die Anzahl und Typ der Instanzvariablen ersichtlich.
Code java: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
public class ReflectionExample { private String attribut1 = "Attribut1"; double attribut2 = 3.0; protected char attribut3 = 'a'; public int attribut4 = 5; public ReflectionExample(String attribut1, double attribut2, char attribut3, int attribut4) { this.attribut1 = attribut1; this.attribut2 = attribut2; this.attribut3 = attribut3; this.attribut4 = attribut4; } public ReflectionExample() { } public static void main(String[] args) { ReflectionExample r1 = new ReflectionExample(); ReflectionExample r2 = new ReflectionExample("Test", 2.0, 'f', 9); System.out.println("Fields:"); ReflectionExample.printArray(r1.getClass().getFields()); ReflectionExample.printArray(r2.getClass().getFields()); System.out.println("Constructors:"); ReflectionExample.printArray(r1.getClass().getConstructors()); ReflectionExample.printArray(r2.getClass().getConstructors()); System.out.println("Methods:"); ReflectionExample.printArray(r1.getClass().getMethods()); ReflectionExample.printArray(r2.getClass().getMethods()); } public static void printArray(Object[] o) { for (int i = 0; i < o.length; i++) { System.out.println(o[i]); } System.out.println(); } public String getAttribut1() { return attribut1; } public void setAttribut1(String attribut1) { this.attribut1 = attribut1; } public double getAttribut2() { return attribut2; } public void setAttribut2(double attribut2) { this.attribut2 = attribut2; } public char getAttribut3() { return attribut3; } public void setAttribut3(char attribut3) { this.attribut3 = attribut3; } public int getAttribut4() { return attribut4; } public void setAttribut4(int attribut4) { this.attribut4 = attribut4; } }
Code :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
Fields: public int ReflectionExample.attribut4 public int ReflectionExample.attribut4 Constructors: public ReflectionExample(java.lang.String,double,char,int) public ReflectionExample() public ReflectionExample(java.lang.String,double,char,int) public ReflectionExample() Methods: public static void ReflectionExample.printArray(java.lang.Object[]) public java.lang.String ReflectionExample.getAttribut1() public void ReflectionExample.setAttribut1(java.lang.String) public double ReflectionExample.getAttribut2() public void ReflectionExample.setAttribut2(double) public char ReflectionExample.getAttribut3() public void ReflectionExample.setAttribut3(char) public int ReflectionExample.getAttribut4() public void ReflectionExample.setAttribut4(int) public static void ReflectionExample.main(java.lang.String[]) public native int java.lang.Object.hashCode() public final native java.lang.Class java.lang.Object.getClass() public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException public final void java.lang.Object.wait() throws java.lang.InterruptedException public boolean java.lang.Object.equals(java.lang.Object) public final native void java.lang.Object.notify() public final native void java.lang.Object.notifyAll() public java.lang.String java.lang.Object.toString() public static void ReflectionExample.printArray(java.lang.Object[]) public java.lang.String ReflectionExample.getAttribut1() public void ReflectionExample.setAttribut1(java.lang.String) public double ReflectionExample.getAttribut2() public void ReflectionExample.setAttribut2(double) public char ReflectionExample.getAttribut3() public void ReflectionExample.setAttribut3(char) public int ReflectionExample.getAttribut4() public void ReflectionExample.setAttribut4(int) public static void ReflectionExample.main(java.lang.String[]) public native int java.lang.Object.hashCode() public final native java.lang.Class java.lang.Object.getClass() public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException public final void java.lang.Object.wait() throws java.lang.InterruptedException public boolean java.lang.Object.equals(java.lang.Object) public final native void java.lang.Object.notify() public final native void java.lang.Object.notifyAll() public java.lang.String java.lang.Object.toString()
Vg Erdal
-
04.11.06 14:13 #3
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo!
Schau mal hier:
Code java: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
/** * */ package de.tutorials.spring.training; import java.lang.reflect.Field; /** * @author TDarimont * */ public class ReflectionExample { /** * @param args */ public static void main(String[] args) throws Exception { Bubu bubu = new Bubu("aPrivate","aProtected","aPackageProtected"); bubu.aStaticPackageProtectedValue = "aStaticProtected"; for(Field field : bubu.getClass().getDeclaredFields()){ field.setAccessible(true); System.out.println(field.getName() + " contains: " + field.get(bubu)); } } static class Bubu{ private String aPrivateValue; protected String aProtectedValue; String aPackageProtectedValue; static String aStaticPackageProtectedValue; public Bubu(String privateValue, String protectedValue, String packageProtectedValue) { super(); aPrivateValue = privateValue; aProtectedValue = protectedValue; aPackageProtectedValue = packageProtectedValue; } } }
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Uiii, schick, vielen Dank, hatte es in der zwischen Zeit auch schon mit gettern gelöst, werde es wohl auch so belassen, aber trotzdem ist es für spätere Zwecke bestimmt nützlich direkt auf die Variablen zugreifen zu können..
Been there, done that, got the T-Shirt..
Ähnliche Themen
-
Reflection in JavaScript möglich?
Von PSP im Forum Javascript & AjaxAntworten: 3Letzter Beitrag: 24.10.10, 19:39 -
Reflection - Wie kann ich Werte zu einer List<> hinzufügen?
Von Jacky87 im Forum .NET WPF & SilverlightAntworten: 2Letzter Beitrag: 18.05.10, 18:24 -
Definierte Random-Werte möglich ?
Von AvS im Forum JavaAntworten: 6Letzter Beitrag: 25.11.08, 16:45 -
Instanzvariablen: Anfangswert definieren
Von Templorials im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 24.07.08, 13:59 -
Anfängerniveau - Instanzvariablen <identifier expected>
Von gebbissimo im Forum JavaAntworten: 11Letzter Beitrag: 27.01.08, 17:26





Zitieren

Login





