整理。需要注意的是Java的原始和對象區分(即int
和Integer
是不一樣的。如果你有,比如說,int i = 0
,然後做i = null
將引發異常。如果你有Integer i = 0
,然後i = null
是罰款)。
Java有可能以簡單的方式提供您想要的東西 - 例如,您可以執行此操作。
public class Sample {
int i = =1;
String = "value";
LocalDateTime time = LocalDateTime.now();
}
等。根據其中數據是從(例如被從其中這些字段可以是空數據庫來嗎?)的到來,這可能是足夠的。
編輯:Java有默認的類級字段。原始類型的默認值是0
(private int i = 0;
與private int i;
相同),對於它的對象是null
(private String s = null;
與private String s;
相同)。
否則,如果您使用的是框架(如春,JEE等),那麼他們可能會提供一個更好的方式來對你發回的響應設置的默認值。
是否有你需要將其設置爲Undefined
具體理由嗎? JavaScript會將null
的值視爲falsey默認情況下(例如var a = null; if (a) {...} else {...}
將採用else
路徑),所以我會假設無論向最終用戶顯示的信息都能夠沿着if (!field) { display("Undefined", fieldName); }
的行發言。
如果完全沒有其他方式來做到這一點,那麼它可以完成,但考慮到上面的關於基元和對象的不同點,如果您想要在構建後掃描類並更改所有字段上課,你會有一個相當有趣的時間。
下面的代碼將獲取在類的所有字段(但不是在超類(ES)!),並將其設置爲-1
,"value"
,或者爲null,取決於類型:
try {
final Object o = new Object();
Field[] declaredFields = o.getClass().getDeclaredFields();
for (Field f : declaredFields) {
f.setAccessible(true);
if(f.getType().equals(int.class) || f.getType().equals(Integer.class)) {
f.setInt(o, -1);
}
if(f.getType().equals(long.class) || f.getType().equals(Long.class)) {
f.setLong(o, -1L);
}
if(f.getType().equals(double.class) || f.getType().equals(Double.class)) {
f.setDouble(o, -1.0D);
}
if(f.getType().equals(float.class) || f.getType().equals(Float.class)) {
f.setFloat(o, -1.0F);
}
if(f.getType().equals(byte.class) || f.getType().equals(Byte.class)) {
f.setByte(o, (byte)-1);
}
if(f.getType().equals(char.class) || f.getType().equals(Character.class)) {
f.setChar(o, (char)-1);
}
if(f.getType().equals(String.class)) {
f.set(o, "value");
}
else {
f.set(o, null);
}
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
我強烈建議尋找一種更簡單的方法來做你想做的事情,如果可能的話。
你的意思是:OBJ [關鍵] = 「未定義」,OBJ [關鍵] = 0L;我猜 – Gavriel
原始值如long和boolean已經有了默認值。不知道爲什麼你會使用拳擊對象類作爲字段 –
我想你可能意思是「場」而不是「價值」。 –