This commit is contained in:
Looly
2019-11-26 11:21:34 +08:00
parent de80af155c
commit 83460af7ef
18 changed files with 192 additions and 140 deletions

View File

@@ -19,6 +19,8 @@ import java.util.List;
import java.util.ListIterator;
import java.util.RandomAccess;
import static cn.hutool.json.JSONConverter.*;
/**
* JSON数组<br>
* JSON数组是表示中括号括住的数据表现形式<br>
@@ -30,7 +32,7 @@ import java.util.RandomAccess;
*
* @author looly
*/
public class JSONArray extends JSONGetter<Integer> implements JSON, List<Object>, RandomAccess {
public class JSONArray implements JSON, JSONGetter<Integer>, List<Object>, RandomAccess {
private static final long serialVersionUID = 2664900568717612292L;
/** 默认初始大小 */
@@ -236,7 +238,7 @@ public class JSONArray extends JSONGetter<Integer> implements JSON, List<Object>
@Override
public <T> T getByPath(String expression, Class<T> resultType) {
return JSONConverter.jsonConvert(resultType, getByPath(expression), true);
return jsonConvert(resultType, getByPath(expression), true);
}
@Override
@@ -314,6 +316,7 @@ public class JSONArray extends JSONGetter<Integer> implements JSON, List<Object>
}
}
@SuppressWarnings("NullableProblems")
@Override
public Iterator<Object> iterator() {
return rawList.iterator();
@@ -344,13 +347,14 @@ public class JSONArray extends JSONGetter<Integer> implements JSON, List<Object>
return rawList.contains(o);
}
@SuppressWarnings("NullableProblems")
@Override
public Object[] toArray() {
return rawList.toArray();
}
@Override
@SuppressWarnings("unchecked")
@SuppressWarnings({"unchecked", "NullableProblems"})
public <T> T[] toArray(T[] a) {
return (T[]) JSONConverter.toArray(this, a.getClass().getComponentType());
}
@@ -370,11 +374,13 @@ public class JSONArray extends JSONGetter<Integer> implements JSON, List<Object>
return rawList.remove(o);
}
@SuppressWarnings("NullableProblems")
@Override
public boolean containsAll(Collection<?> c) {
return rawList.containsAll(c);
}
@SuppressWarnings("NullableProblems")
@Override
public boolean addAll(Collection<?> c) {
if (CollUtil.isEmpty(c)) {
@@ -386,6 +392,7 @@ public class JSONArray extends JSONGetter<Integer> implements JSON, List<Object>
return true;
}
@SuppressWarnings("NullableProblems")
@Override
public boolean addAll(int index, Collection<?> c) {
if (CollUtil.isEmpty(c)) {
@@ -398,11 +405,13 @@ public class JSONArray extends JSONGetter<Integer> implements JSON, List<Object>
return rawList.addAll(index, list);
}
@SuppressWarnings("NullableProblems")
@Override
public boolean removeAll(Collection<?> c) {
return this.rawList.removeAll(c);
}
@SuppressWarnings("NullableProblems")
@Override
public boolean retainAll(Collection<?> c) {
return this.rawList.retainAll(c);
@@ -446,16 +455,19 @@ public class JSONArray extends JSONGetter<Integer> implements JSON, List<Object>
return this.rawList.lastIndexOf(o);
}
@SuppressWarnings("NullableProblems")
@Override
public ListIterator<Object> listIterator() {
return this.rawList.listIterator();
}
@SuppressWarnings("NullableProblems")
@Override
public ListIterator<Object> listIterator(int index) {
return this.rawList.listIterator(index);
}
@SuppressWarnings("NullableProblems")
@Override
public List<Object> subList(int fromIndex, int toIndex) {
return this.rawList.subList(fromIndex, toIndex);

View File

@@ -9,7 +9,7 @@ import cn.hutool.core.getter.OptNullBasicTypeFromObjectGetter;
*
* @param <K> Key类型
*/
public abstract class JSONGetter<K> extends OptNullBasicTypeFromObjectGetter<K>{
public interface JSONGetter<K> extends OptNullBasicTypeFromObjectGetter<K>{
/**
* key对应值是否为<code>null</code>或无此key
@@ -17,7 +17,7 @@ public abstract class JSONGetter<K> extends OptNullBasicTypeFromObjectGetter<K>{
* @param key 键
* @return true 无此key或值为<code>null</code>或{@link JSONNull#NULL}返回<code>false</code>,其它返回<code>true</code>
*/
public boolean isNull(K key) {
default boolean isNull(K key) {
return JSONNull.NULL.equals(this.getObj(key));
}
@@ -28,7 +28,7 @@ public abstract class JSONGetter<K> extends OptNullBasicTypeFromObjectGetter<K>{
* @return 字符串类型值
* @since 4.2.2
*/
public String getStrEscaped(K key) {
default String getStrEscaped(K key) {
return getStrEscaped(key, null);
}
@@ -40,7 +40,7 @@ public abstract class JSONGetter<K> extends OptNullBasicTypeFromObjectGetter<K>{
* @return 字符串类型值
* @since 4.2.2
*/
public String getStrEscaped(K key, String defaultValue) {
default String getStrEscaped(K key, String defaultValue) {
return JSONUtil.escape(getStr(key, defaultValue));
}
@@ -51,7 +51,7 @@ public abstract class JSONGetter<K> extends OptNullBasicTypeFromObjectGetter<K>{
* @param key KEY
* @return JSONArray对象如果值为null或者非JSONArray类型返回null
*/
public JSONArray getJSONArray(K key) {
default JSONArray getJSONArray(K key) {
final Object object = this.getObj(key);
if(null == object) {
return null;
@@ -70,7 +70,7 @@ public abstract class JSONGetter<K> extends OptNullBasicTypeFromObjectGetter<K>{
* @param key KEY
* @return JSONArray对象如果值为null或者非JSONObject类型返回null
*/
public JSONObject getJSONObject(K key) {
default JSONObject getJSONObject(K key) {
final Object object = this.getObj(key);
if(null == object) {
return null;
@@ -92,7 +92,7 @@ public abstract class JSONGetter<K> extends OptNullBasicTypeFromObjectGetter<K>{
* @return Bean对象如果值为null或者非JSONObject类型返回null
* @since 3.1.1
*/
public <T> T getBean(K key, Class<T> beanType) {
default <T> T getBean(K key, Class<T> beanType) {
final JSONObject obj = getJSONObject(key);
return (null == obj) ? null : obj.toBean(beanType);
}
@@ -108,7 +108,7 @@ public abstract class JSONGetter<K> extends OptNullBasicTypeFromObjectGetter<K>{
* @throws ConvertException 转换异常
* @since 3.0.8
*/
public <T> T get(K key, Class<T> type) throws ConvertException{
default <T> T get(K key, Class<T> type) throws ConvertException{
return get(key, type, false);
}
@@ -123,7 +123,7 @@ public abstract class JSONGetter<K> extends OptNullBasicTypeFromObjectGetter<K>{
* @throws ConvertException 转换异常
* @since 3.0.8
*/
public <T> T get(K key, Class<T> type, boolean ignoreError) throws ConvertException{
default <T> T get(K key, Class<T> type, boolean ignoreError) throws ConvertException{
final Object value = this.getObj(key);
if(null == value){
return null;

View File

@@ -37,7 +37,7 @@ import java.util.Set;
*
* @author looly
*/
public class JSONObject extends JSONGetter<String> implements JSON, Map<String, Object> {
public class JSONObject implements JSON, JSONGetter<String>, Map<String, Object> {
private static final long serialVersionUID = -330220388580734346L;
/** 默认初始大小 */
@@ -163,7 +163,7 @@ public class JSONObject extends JSONGetter<String> implements JSON, Map<String,
*/
public JSONObject(Object source, boolean ignoreNullValue, boolean isOrder) {
this(source, JSONConfig.create().setOrder(isOrder)//
.setIgnoreCase((source instanceof CaseInsensitiveMap) || (source instanceof CaseInsensitiveLinkedMap))//
.setIgnoreCase((source instanceof CaseInsensitiveMap))//
.setIgnoreNullValue(ignoreNullValue));
}
@@ -478,16 +478,19 @@ public class JSONObject extends JSONGetter<String> implements JSON, Map<String,
rawHashMap.clear();
}
@SuppressWarnings("NullableProblems")
@Override
public Set<String> keySet() {
return this.rawHashMap.keySet();
}
@SuppressWarnings("NullableProblems")
@Override
public Collection<Object> values() {
return rawHashMap.values();
}
@SuppressWarnings("NullableProblems")
@Override
public Set<Entry<String, Object>> entrySet() {
return rawHashMap.entrySet();
@@ -643,7 +646,7 @@ public class JSONObject extends JSONGetter<String> implements JSON, Map<String,
*
* @param source JavaBean或者Map对象或者String
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
@SuppressWarnings({"rawtypes", "unchecked", "StatementWithEmptyBody"})
private void init(Object source) {
if (null == source) {
return;