我试图创建一个可扩展的类,它可以有一些方法,如:createInstanceFromArgument(Class<T> class)
和其他方法:
将从其他模型扩展的Abstractclass:
public class AbstractModelsMethods {
private DocumentRevision documentRevision;
public DocumentRevision getDocumentRevision() {
return documentRevision;
}
public void setDocumentRevision(DocumentRevision documentRevision) {
this.documentRevision = documentRevision;
}
public static <T> T fromJson(String json, Class<T> classOfT) throws JsonSyntaxException {
T object = GsonUtils.getGson().fromJson(json, (Type) classOfT);
return Primitives.wrap(classOfT).cast(object);
}
public static <T> T fromRevision(DocumentRevision revision, Class<T> classOfT) throws JsonSyntaxException {
T object = fromJson(revision.getBody().toString(), classOfT);
try {
Method m = object.getClass().getDeclaredMethod("setDocumentRevision", classOfT);
m.invoke(revision);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return Primitives.wrap(classOfT).cast(object);
}
}
和样本模型类
public class MyPersonModel extends AbstractModelsMethods {
String oid;
String name;
// other fields and boilerplate not related to Abstractclass
}
当我尝试致电时:MyPersonModel person = MyPersonModel.fromRevision(revision);
它填充了MypersonModel中的字段,但是Abstract中的方法没有被解析,当我尝试打印它时:
Log.d("Testing", "PERSON REVISION: " + person.getDocumentRevision().toString());
它的崩溃说:
Caused
by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
当然是这样的:
Method m = object.getClass().getDeclaredMethod("setDocumentRevision", classOfT);
m.invoke(revision);
未被称为
也许即时通讯试图制作魔法?
suma:我希望所有模型都可以实例化所有其他模型(当然它依赖于第二个参数,Class,所以它会返回这个类的一个实例,而且我不假装使用Person.fromRevision(revision, Dog.class)
必须importante这里的事情是我需要传递一个版本,其中包含一个可以是任何内容的json,并将Revision保存在它创建的同一个obj中并返回给我
可能?