浏览代码

Add autocast method to JSON abstraction and implementation and return the casted objects from get()

Riccardo Balbo 2 年之前
父节点
当前提交
c46895e3ff

+ 2 - 2
jme3-plugins-json-gson/src/main/java/com/jme3/plugins/gson/GsonArray.java

@@ -61,7 +61,7 @@ class GsonArray extends GsonElement implements JsonArray {
 
             @Override
             public JsonElement next() {
-                return new GsonElement(it.next());
+                return new GsonElement(it.next()).autoCast();
             }
         };
     }
@@ -69,7 +69,7 @@ class GsonArray extends GsonElement implements JsonArray {
     @Override
     public JsonElement get(int i) {
         com.google.gson.JsonElement el = arr().get(i);
-        return isNull(el) ? null : new GsonElement(el);
+        return isNull(el)?null:new GsonElement(el).autoCast();
     }
 
     @Override

+ 9 - 0
jme3-plugins-json-gson/src/main/java/com/jme3/plugins/gson/GsonElement.java

@@ -91,5 +91,14 @@ class GsonElement implements JsonElement {
     public JsonPrimitive getAsJsonPrimitive() {
         return new GsonPrimitive(element.getAsJsonPrimitive());
     }
+
+    @SuppressWarnings("unchecked")
+    public <T extends JsonElement> T autoCast() {
+        if(isNull(element)) return null;
+        if (element.isJsonArray()) return (T) new GsonArray(element.getAsJsonArray());
+        if (element.isJsonObject()) return (T) new GsonObject(element.getAsJsonObject());
+        if (element.isJsonPrimitive()) return (T) new GsonPrimitive(element.getAsJsonPrimitive());
+        return (T) new GsonElement(element);
+    }
     
 }

+ 2 - 2
jme3-plugins-json-gson/src/main/java/com/jme3/plugins/gson/GsonObject.java

@@ -72,7 +72,7 @@ class GsonObject extends GsonElement implements JsonObject {
     @Override
     public JsonElement get(String string) {
         com.google.gson.JsonElement el = obj().get(string);
-        return isNull(el) ? null : new GsonElement(el);
+        return isNull(el)?null:new GsonElement(el).autoCast();
     }
 
     @Override
@@ -90,7 +90,7 @@ class GsonObject extends GsonElement implements JsonObject {
 
                 @Override
                 public GsonElement getValue() {
-                    return new GsonElement(entry.getValue());
+                    return new GsonElement(entry.getValue()).autoCast();
                 }
 
                 @Override

+ 10 - 4
jme3-plugins-json/src/main/java/com/jme3/plugins/json/JsonElement.java

@@ -80,17 +80,23 @@ public interface JsonElement {
      */
     public JsonArray getAsJsonArray();
 
-
     /**
      * Returns the object as a Number
      * @return the Number
      */
-    Number getAsNumber();
+    public Number getAsNumber();
 
 
     /**
      * Returns the object as a JsonPrimitive
-     * @return
+     * @return the json primitive
      */
-    JsonPrimitive getAsJsonPrimitive();
+    public JsonPrimitive getAsJsonPrimitive();
+
+    /**
+     * Cast this JsonElement to a specific type
+     * @return the casted JsonElement
+     */
+    public <T extends JsonElement> T autoCast();
+
 }