gpt4 book ai didi

java - 尽管已初始化对象,仍尝试在空对象引用上调用虚拟方法 'java.lang.Class java.lang.Object.getClass()'

转载 作者:行者123 更新时间:2023-12-01 11:05:41 25 4
gpt4 key购买 nike

好吧,上次我问这个问题时,已经被 3 人否决了,然后我就把它删除了。可能没说清楚,抱歉我的错。所以我正在使用 Retrofit 来实现 api 命中。 api 返回一个 JSON,其中包含一个可以为 null 的字段数据。所以 JSON 可以是这样的。

{
"title": "Product",
"description": "A product from Acme's catalog",
"type": "object"
"data":null
}

当它不为空时,它会类似于

{
"title": "Product",
"description": "A product from Acme's catalog",
"type": "object"
"data":{"b":"xyz","a":123}
}

现在我有一个像这样的对象的模型类

public class A {

@Expose
public String title;

@Expose
public String description;

@Expose
public String type;

@Expose
public Data data =new Data();

public Data getData() {
return data;
}

public void setData(Data data) {
this.data = data;
}

}

这就是数据模型

public class Data {

public Data(){
this.a=0;
this.b="";
}

@Expose
public double a;

@Expose
public String b="";


public Double getA() {
return a;
}

public void setA(Double a) {
this.a = a;
}

public String getB() {
return b;
}

public void setB(String b) {
this.b = b;
}

}

Retrofit 会将 JSON 转换为 A 类型的 Java 对象。现在,我对该 A 类型的对象执行的下一件事是将其转换为 B 类型的另一个对象。

为了进行转换,我使用了一个实用程序类。其说明如下

This utility converts one java object to another java object.
* does not support Inheritance
* Mainly useful for when you have two Class one for Restful call and another for ORM suite
* if you get one object from RESTFUL call and another object to be created to save in ORM then generally we
* create another object and manually put the value by setter and getter
* just keep the same field name in both class and use this utility function to assign value from one to another
* and then use another to save in db. So no more stupid getter setter use, it handles nested class and Collection field .

现在我面临的问题是这个类抛出异常

Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference

这是我遇到的唯一错误,没有其他错误。堆栈跟踪是干净的,只是这个错误。基本上对象转换失败了。原因很可能是因为数据字段为空,因为在此之前我没有收到任何此类错误。

这是我的实用程序类(负责对象转换的)的一部分代码。我将两种对象类型传递给一个源和另一个目标。本例中的源是 A 类型的对象。但是第一行导致了我在问题中提到的异常。

        // get the class of source object
Class sourceObjectType = sourceObject.getClass();
// get the class of destination object
Class destinationObjectType = destinationObject.getClass();

现在我不知道如何处理这个异常。我尝试创建一个构造函数,使 Data 不为空,但这不起作用。如果有人能提出建议或帮助我,那就太好了。谢谢!!

最佳答案

您可以首先使用简单的 if 检查您的 destinationObjectType 是否为 null:

    if(destinationObjectType){
// handle your condition here
}

或者你可以处理异常:

try{
// get the class of source object
Class sourceObjectType = sourceObject.getClass();
// get the class of destination object
Class destinationObjectType = destinationObject.getClass();

}
catch(NullPointerException e){

// Handle your exception here
}

问候!

关于java - 尽管已初始化对象,仍尝试在空对象引用上调用虚拟方法 'java.lang.Class java.lang.Object.getClass()',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32976790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com