父类调用静态子方法

时间:2017-03-15 22:41:03

标签: java

我试图创建一个可扩展的类,它可以有一些方法,如: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中并返回给我

可能?

0 个答案:

没有答案