簡體   English   中英

如何檢查字段是否已初始化或包含Java中的默認值

[英]How to check if a field was initialized or contains the default value in Java

我正在使用jackson mapper將json字符串映射到一個類。 這個類看起來像這樣:

class MyClass{      
    @JsonProperty("my_boolean")
    private boolean myBoolean;

    @JsonProperty("my_int")
    private int myInt;

    //Getters and setters
}

我想檢查字段myBoolean和myInt是否實際設置或包含其默認值(false和0)。 我嘗試使用反射並檢查字段是否為空,但我想這對原始類型不起作用。 這就是我現在擁有的:

Field[] fields = myClass.getClass().getDeclaredFields();
        for (Field field : fields) {
            try {            
                field.setAccessible(true);
                Object myObject = field.get(myClass);
                if(myObject != null) {
                  //Thought this would work, but it doesn't
                }
            }
         }

我怎么檢查這個?

謝謝。

您應檢查字段類型是否為原始類型,如果是,請檢查默認包裝器的值。 例如:

Map<Class, Object> defaultValues = new HashMap<Class, Object>();
defaultValues.put(Integer.class, Integer.valueOf(0)); 
// etc - include all primitive types

然后:

Object value = field.get(myClass);
if (value == null ||
    (field.getType().isPrimitive() && value.equals(defaultValues.get(field.getType())) {
   // Field has its default value
} 

這不會告訴該字段是否已設置 - 僅限其當前值是否為該類型的默認值。 你不能區分一個值為0的字段,因為它已經明確地設置為那個方式,而一個字段沒有明確地分配給它。

您還可以使用具有默認值的對象而不是基本類型;

class MyClass{      
    @JsonProperty("my_boolean")
    private Boolean myBoolean = BOOLEAN_DEFAULT; // get it from a map

    @JsonProperty("my_int")
    private Integer myInt = INT_DEFAULT;  // get it from a map

    //Getters and setters
}

然后

if (myClass.getMyInt() == null) {
  // The value is explicitly set to null
} else if (defaultValuesMap.get(Integer.class).equals(myClass.getMyInt())) {
  // The value has its default value
} else {
  // etc
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM