Hallo zusammen,
ich habe den Reflection-Mechanismus entdeckt und stelle mir dazu einige Frage.
Ist es möglich Objekte zu verändern die z. B. in einer Liste gehalten werden?
Hier einmal ein kleines Programm was ich derzeit geschrieben habe:
Die Klasse Blob:
Unten im Code hab ich mir die Frage gestellt ob ich auch Objekte direkt Manipulieren kann oder eben auch wenn sich diese Objekte in einer Datenstruktur befinden etc. Denn bis jetzt hab ich von meiner Klasse immer eine neue Instanz erstellt. Das führt dann eben zu einem neuen Objekt an dem ich alles verändern kann selbst Private Methoden oder Datenelemente aufrufen und verändern
Nun aber eben die Frage ist es auch möglich das ich die 10 Blubs in meiner ArrayListe irgendwie geändert bekomme?
ich habe den Reflection-Mechanismus entdeckt und stelle mir dazu einige Frage.
Ist es möglich Objekte zu verändern die z. B. in einer Liste gehalten werden?
Hier einmal ein kleines Programm was ich derzeit geschrieben habe:
Java:
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.*;
import java.util.*;
public class TestReflection {
public static void main(String[] args) {
try {
Class c = Class.forName("Aufgabe1.Blob");
Object o = c.getConstructor(String.class, String.class).newInstance("Blob", "blob");
System.out.println(o);
Constructor constructor = Blob.class.getConstructor(String.class, String.class);
Blob d = (Blob) constructor.newInstance("Test", "test");
System.out.println(d);
Method m1 = c.getDeclaredMethod("getVorname");
m1.setAccessible(true);
System.out.println(m1.invoke(o));
Method m2 = c.getDeclaredMethod("setVorname", String.class);
m2.setAccessible(true);
m2.invoke(o, "Neuer Name");
System.out.println(o);
System.out.println("Class:\n" + c + "\nMethods:");
List<Method> methods = Arrays.asList(c.getDeclaredMethods());
for(Method m : methods) {
System.out.println(m);
}
System.out.println("Fields:");
List<Field> fields = Arrays.asList(c.getDeclaredFields());
for(Field f : fields) {
System.out.println(f);
}
ArrayList<Blob> meineBlobs = new ArrayList<>();
for(int i = 0; i < 10; i++)
meineBlobs.add(new Blob("Vorname " + i, "Nachname " + i));
}catch(Exception e) {
System.out.println(e.getMessage());
}
}
}
Die Klasse Blob:
Java:
public class Blob {
private String vorname, nachname;
public Blob(String v, String n) {
vorname = v;
nachname = n;
}
public String getVorname() {
return vorname;
}
public String getNachname() {
return nachname;
}
public void setVorname(String v) {
vorname = v;
}
public void setNachname(String n) {
nachname = n;
}
public String toString() {
return vorname + " " + nachname;
}
}
Unten im Code hab ich mir die Frage gestellt ob ich auch Objekte direkt Manipulieren kann oder eben auch wenn sich diese Objekte in einer Datenstruktur befinden etc. Denn bis jetzt hab ich von meiner Klasse immer eine neue Instanz erstellt. Das führt dann eben zu einem neuen Objekt an dem ich alles verändern kann selbst Private Methoden oder Datenelemente aufrufen und verändern
Nun aber eben die Frage ist es auch möglich das ich die 10 Blubs in meiner ArrayListe irgendwie geändert bekomme?