Test if a class contains an instance variable based on its name
Sometimes I need to test which class has declared some variable(s), is there another way how to test that, if concrete class contains variable with some name
try {
testLocalVariable = (String) (this.getClass().getDeclaredField("testVariable").get(this));
} catch (NoSuchFieldException ex) {
} catch (SecurityException ex) {
} catch (IllegalArgumentException ex) {
} catch (IllegalAccessException ex) {
}
If I understand correctly, you use this code in a superclass to test if a subclass has a testVariable
field.
Why don't you simply add a method like this?
/**
* Returns true if the object declares a testVariable field, false otherwise. Subclasses should
* override this method
*/
protected boolean hasTestVariableField() {
return false;
}
Seems much more OO to me, doesn't break encapsulation.
That said, I've not really understood why you needed this in the first place.
Classes have fields, not local variables.
You can use getDeclaredField()
however this will not find fields declared by super classes.
You don't need lookup the fields value, if you don't get an exception the field is there.