Тебе не нужно отражение ...
if (thizz == null) {
//it's not initialized
}
if (that == 0) {
//it's not initialized
}
if(bar == false) {
//it's not initialized
}
Однако их можно было инициализировать, а затем восстановить их значения по умолчанию. Если вы действительно хотите знать, были ли они инициализированы, вы можете сделать что-то вроде этого:
private boolean isFooInitialized = false;
private Foo foo;
public void setFoo(Foo foo) {
this.foo = foo;
isFooInitialized = foo != null;
}
/ редактировать
Чтобы получить все поля из класса, проверьте Class.getDeclaredFields () . Это даст все поля, а не только публичные.
Отсюда вы можете проверить тип поля и получить его значение:
Foo foo = ...
Field[] fooFields = foo.getClass().getDeclaredFields();
for (Field fooField : fooFields) {
Class<?> fooFieldClass = fooField.getClass();
if (fooFieldClass.equals(int.class)) {
if (fooField.getInt(foo) == 0) {
// not initialized
}
} else if (fooFieldClass.equals(double.class)) {
if (fooField.getDouble(foo) == 0) {
// not initialized
}
} else if (fooFieldClass.equals(boolean.class)) {
if (fooField.getBoolean(foo) == false) {
// not initialized
}
} else if (fooFieldClass.equals(float.class)) {
if (fooField.getFloat(foo) == 0) {
// not initialized
}
} else if (fooFieldClass.equals(char.class)) {
if (fooField.getChar(foo) == 0) {
// not initialized
}
} else if (fooFieldClass.equals(byte.class)) {
if (fooField.getByte(foo) == 0) {
// not initialized
}
} else if (fooFieldClass.equals(long.class)) {
if (fooField.getLong(foo) == 0) {
// not initialized
}
} else if (fooField.get(foo) == null) {
// not initialized
}
}