tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
757
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    elmato elmato ist offline Mitglied Brokat
    Registriert seit
    May 2005
    Ort
    NRW
    Beiträge
    408
    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
    elmato
     
    Been there, done that, got the T-Shirt..

  2. #2
    flashray flashray ist offline Mitglied Rubin
    Registriert seit
    Sep 2005
    Ort
    Mannheim
    Beiträge
    1.325
    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
     

  3. #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ß Tom
     
    Java 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

  4. #4
    elmato elmato ist offline Mitglied Brokat
    Registriert seit
    May 2005
    Ort
    NRW
    Beiträge
    408
    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

  1. Reflection in JavaScript möglich?
    Von PSP im Forum Javascript & Ajax
    Antworten: 3
    Letzter Beitrag: 24.10.10, 19:39
  2. Reflection - Wie kann ich Werte zu einer List<> hinzufügen?
    Von Jacky87 im Forum .NET WPF & Silverlight
    Antworten: 2
    Letzter Beitrag: 18.05.10, 18:24
  3. Definierte Random-Werte möglich ?
    Von AvS im Forum Java
    Antworten: 6
    Letzter Beitrag: 25.11.08, 16:45
  4. Instanzvariablen: Anfangswert definieren
    Von Templorials im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 24.07.08, 13:59
  5. Antworten: 11
    Letzter Beitrag: 27.01.08, 17:26