So I've been trying to fix this for a few hours now, to no avail.
Basically, I have class A, and class B which extends A. A has a string field "name", and another field "id", class B changes name when instantiated. B is then later stored as A, and the only thing identifying that A class to the B class is the "id" field.
I need a way to get the changed "name" that the B class has, from the A class.
Here's a code example:
class A {
public String name = "test";
public String id = "A_ID";
public A(String id) {
if (id.equals("B_ID") {
// how would I get the name field of the B class, without instantiating B
}
}
}
class B extends A {
{
name = "test1";
id = "B_ID";
}
}
And here's what I've tried:
class A {
public static Map<String, Class<? extends A> REGISTRY = new HashMap<>();
public String name = "test";
public String id = "A_ID"; // is B_ID when changed
public Object getField(String key) {
Field field = REGISTRY.get(this.id).getSuperclass().getDeclaredField(key);
return field.get(this); // <- the issue
}
}
class B extends A {
static {
REGISTRY.put("B_ID", B.class);
}
public B() {
name = "test1";
id = "B_ID";
}
}
Here's the problem with my solution, passing this to field.get(this) returns the fields of the current A object, which is what we already have. I need the fields that B changes when instantiated, but when B gets instantiated it calls getField a few times, which then causes a perpetual loop, I need a way to get the fields from B without instantiating B.
I've tried casting A to B but that causes a ClassCastException.
Sorry that this is confusing, I can't send the entire class as it's literally 1k+ lines, but basically the ID field is the only data stored with A that remains from B, and I need a way to get the fields from B without instantiating it
Aucun commentaire:
Enregistrer un commentaire