Convert支持部分TypeVariable
This commit is contained in:
@@ -46,6 +46,14 @@ public final class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T
|
|||||||
if (type instanceof ParameterizedType) {
|
if (type instanceof ParameterizedType) {
|
||||||
final ParameterizedType pt = (ParameterizedType) type;
|
final ParameterizedType pt = (ParameterizedType) type;
|
||||||
this.typeClass = (Class) pt.getRawType();
|
this.typeClass = (Class) pt.getRawType();
|
||||||
|
} else if (type instanceof TypeVariable) {
|
||||||
|
TypeVariable tv = (TypeVariable) type;
|
||||||
|
Type[] ts = tv.getBounds();
|
||||||
|
if (ts.length == 1 && ts[0] instanceof Class) {
|
||||||
|
this.typeClass = (Class) ts[0];
|
||||||
|
} else {
|
||||||
|
throw new ConvertException("[" + type + "] is no a class or ParameterizedType");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
this.typeClass = (Class) type;
|
this.typeClass = (Class) type;
|
||||||
}
|
}
|
||||||
@@ -61,6 +69,14 @@ public final class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T
|
|||||||
if (type instanceof ParameterizedType) {
|
if (type instanceof ParameterizedType) {
|
||||||
final ParameterizedType pts = (ParameterizedType) type;
|
final ParameterizedType pts = (ParameterizedType) type;
|
||||||
clazz = (Class) (pts).getRawType();
|
clazz = (Class) (pts).getRawType();
|
||||||
|
} else if (type instanceof TypeVariable) {
|
||||||
|
TypeVariable tv = (TypeVariable) type;
|
||||||
|
Type[] ts = tv.getBounds();
|
||||||
|
if (ts.length == 1 && ts[0] instanceof Class) {
|
||||||
|
clazz = (Class) ts[0];
|
||||||
|
} else {
|
||||||
|
throw new ConvertException("[" + type + "] is no a class or TypeVariable");
|
||||||
|
}
|
||||||
} else if (!(type instanceof Class)) {
|
} else if (!(type instanceof Class)) {
|
||||||
throw new ConvertException("[" + type + "] is no a class");
|
throw new ConvertException("[" + type + "] is no a class");
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -41,6 +41,14 @@ public final class ObjectEncoder<W extends Writer, T> implements Encodeable<W, T
|
|||||||
if (type instanceof ParameterizedType) {
|
if (type instanceof ParameterizedType) {
|
||||||
final ParameterizedType pt = (ParameterizedType) type;
|
final ParameterizedType pt = (ParameterizedType) type;
|
||||||
this.typeClass = (Class) pt.getRawType();
|
this.typeClass = (Class) pt.getRawType();
|
||||||
|
} else if (type instanceof TypeVariable) {
|
||||||
|
TypeVariable tv = (TypeVariable) type;
|
||||||
|
Type[] ts = tv.getBounds();
|
||||||
|
if (ts.length == 1 && ts[0] instanceof Class) {
|
||||||
|
this.typeClass = (Class) ts[0];
|
||||||
|
} else {
|
||||||
|
throw new ConvertException("[" + type + "] is no a class or ParameterizedType");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
this.typeClass = (Class) type;
|
this.typeClass = (Class) type;
|
||||||
}
|
}
|
||||||
@@ -81,7 +89,7 @@ public final class ObjectEncoder<W extends Writer, T> implements Encodeable<W, T
|
|||||||
if (method.getName().length() < 3) continue;
|
if (method.getName().length() < 3) continue;
|
||||||
if (method.getName().equals("getClass")) continue;
|
if (method.getName().equals("getClass")) continue;
|
||||||
if (!method.getName().startsWith("is") && !method.getName().startsWith("get")) continue;
|
if (!method.getName().startsWith("is") && !method.getName().startsWith("get")) continue;
|
||||||
if (factory.isConvertDisabled(method)) continue;
|
if (factory.isConvertDisabled(method)) continue;
|
||||||
if (method.getParameterTypes().length != 0) continue;
|
if (method.getParameterTypes().length != 0) continue;
|
||||||
if (method.getReturnType() == void.class) continue;
|
if (method.getReturnType() == void.class) continue;
|
||||||
if (reversible && (cps == null || !contains(cps, ConvertFactory.readGetSetFieldName(method)))) {
|
if (reversible && (cps == null || !contains(cps, ConvertFactory.readGetSetFieldName(method)))) {
|
||||||
|
|||||||
Reference in New Issue
Block a user