首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >尽管已初始化对象,但仍尝试对null对象引用调用虚拟方法“java.lang.Class java.lang.Object.getClass()”

尽管已初始化对象,但仍尝试对null对象引用调用虚拟方法“java.lang.Class java.lang.Object.getClass()”
EN

Stack Overflow用户
提问于 2015-10-06 18:13:58
回答 1查看 6.4K关注 0票数 0

好的,上次我问了这个问题,在我删除它之前,它被3个人否决了。可能不是很清楚,对不起是我的错。因此,我正在使用改进来制作api点击量。api返回一个JSON,该JSON的字段数据可以为空。所以JSON可以是这样的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "title": "Product",
    "description": "A product from Acme's catalog",
    "type": "object"
    "data":null
}

当它不是null时,它将如下所示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "title": "Product",
    "description": "A product from Acme's catalog",
    "type": "object"
    "data":{"b":"xyz","a":123}
}

现在我为这个对象创建了一个模型类,如下所示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;
    }

}

这是数据模型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;
    }

}

改进会将JSON转换为A类型的Java对象。现在,我对此A类型的对象所做的下一件事是将其转换为B类型的另一个对象。

为了进行转换,我使用了一个实用程序类。它的描述如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 .

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        // get the class of source object
        Class sourceObjectType = sourceObject.getClass();
        // get the class of destination object
        Class destinationObjectType = destinationObject.getClass();

现在我不确定如何处理这个异常。我尝试创建一个构造函数,使数据不为空,但这不起作用。如果有人能给我提点建议或者帮我一下,那就太好了。谢谢!!

EN

回答 1

Stack Overflow用户

发布于 2015-10-06 18:30:58

您可以先使用一个简单的if检查您的destinationObjectType是否为空:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    if(destinationObjectType){
        // handle your condition here
    }

或者,您可以处理异常:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
}

致以问候!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32976790

复制
相关文章
Java String 对 null 对象的容错处理
第一句相信大家都会容易理解,这是类型初始化的基础知识,但是第二句就让我很疑惑:为什么打印一个 null 对象不会抛出异常?带着这个疑问,我开始了解惑之旅。下面我将详细阐述我解决这个问题的思路,并且深入 JDK 源码找到问题的答案。
Java团长
2018/08/06
2.2K0
Java String 对 null 对象的容错处理
Primitives that are fields in a class are automatically initialized to zero, as noted in the Everything Is an Object chapter. But the object references are initialized to null, and if you try to call methods for any of them, you’ll get an exception-a runtime error. Conveniently, you can still print a null reference without throwing an exception.
终码一生
2022/04/14
4440
C++对象成员的引用 | 对象成员引用
C++不仅可以在类外引用对象的公用数据成员,还可以调用对象的公用成员函数,但同样必须指出对象名,应该注意所访问的成员是公用的还是私有的,只能访问public成员,而不能访问 private成员。
小林C语言
2021/01/21
2.1K0
C++对象成员的引用 | 对象成员引用
VBA对象模型和对象引用
EXCEL中的各种对象并不是孤立存在的,彼此之间都是有联系和层级关系,对象模型的概念就是用来描述对象之间关系的,构建了一个完整的体系。
无言之月
2019/10/14
2.3K0
VBA对象模型和对象引用
空对象(Null)模式
一个方法返回 NULL,意味着方法的调用端需要去检查返回值是否是 NULL,这么做会导致非常多的冗余的检查代码。并且如果某一个调用端忘记了做这个检查返回值,而直接使用返回的对象,那么就有可能抛出空指针异常。
MickyInvQ
2022/05/06
6070
空对象(Null)模式
c++面向对象设计(谭浩强) 2.4对象成员的引用
2.4.1 通过对象名和成员运算符访问对象中的成员 stud1.num=1001; 对象名.成员名 访问的是public中的 2.4.2 通过指向对象的指针访问对象中的成员 p->hour (*p).hour t,hour 2.4.3通过对对象的引用 Time t1; Time &t2=t1; cout << t2.hour;
xxxflower
2023/04/16
5440
PHP面向对象-对象方法的调用和参数传递
要调用对象方法,需要先创建对象,然后使用对象名和方法名调用该方法。下面是一个示例,演示如何创建对象并调用其方法:
堕落飞鸟
2023/04/27
1.9K0
[PHP] 对象和引用
在 PHP 5,一个对象变量已经不再保存整个对象的值。只是保存一个标识符来访问真正的对象内容。
唯一Chat
2021/06/10
5870
Python 面向对象编程:类、对象、初始化和方法详解
Python 是一种面向对象的编程语言。在 Python 中,几乎所有东西都是对象,都具有其属性和方法。
小万哥
2023/10/25
3710
Python 面向对象编程:类、对象、初始化和方法详解
Java虚拟机值对象访问以及如何使用对象的引用(2)
对象访问在 Java 语言中无处不在,是最普通的程序行为,但即使是最简单的访问,也会却涉及 Java 栈、 Java 堆、方法区这三个最重要内存区域之间的关联关系,如下面的这句代码:
Java后端技术
2018/08/09
2.8K0
Java虚拟机值对象访问以及如何使用对象的引用(2)
JAVA 引用与对象
参考:https://www.cnblogs.com/perfy/archive/2012/10/16/2726039.html
平凡的学生族
2019/05/25
5180
如何通过反射调用对象的方法?
import java.lang.reflect.Method; class MethodInvokeTest { public static void main(String[] args) throws Exception { String str = "hello"; Method m = str.getClass().getMethod("toUpperCase"); System.out.println(m.invoke(str));
唐怀瑟
2018/08/30
2.8K0
python的对象引用
Every object has an identity, a type and a value. An object’s identity never changes once it has been created; you may think of it as the object’s address in memory. The ‘is‘ operator compares the identity of two objects; the id() function returns an integer representing its identity.
哒呵呵
2018/08/06
1.1K0
引用类型、对象拷贝
1.引用类型有哪些?非引用类型有哪些 引用类型 引用类型(对象、数组、函数、正则): 指的是那些保存在堆内存中的对象,变量中保存的实际上只是一个指针,这个指针指向内存中的另一个位置,由该位置保存对象。 非引用类型(基本类型) 基本类型值(数值、布尔值、null和undefined): 指的是保存在栈内存中的简单数据段; 2.代码练习 (1)如下代码输出什么?为什么 var obj1 = {a:1, b:2}; var obj2 = {a:1, b:2}; console.log(obj1 == ob
小胖
2018/06/27
7450
JavaScript的对象引用
在一个函数体内,var变量声明的变量,其作用域只在该函数体内,对于函数体外而言,是不可见的(废话)。
libo1106
2018/08/08
9850
java对象数组 创建对象数组,初始化对象数组
对象数组的概念: 如果一个数组中的元素是对象类型,则称该数组为对象数组。 当需要一个类的多个对象时,应该用该类的对象数组来表示,通过改变下标值就可以访问到不同的对象。 对象数组的定义和使用: 对象数组的定义与一般数组的定义类似,但是需要为每一个元素实例化。 对象数组的声明形式是: 类名 对象数组名 [ ]; 为对象数组分配内存空间: 对象数组名=new 类名[数组长度];//注意 :此处不是构造方法了 可以将对象数组的声明和创建用一条语句来完成。例如:定义一个学生类对象数组,可以用下面的语句定义:Student stu[ ]=new Student[30]; stu [ ]是对象数组名,它所表示的数组一共有30个元素,每一个元素都是Student类的对象名,还没有实例化,所以还必须为每一个元素实例化。比如如下的过程: for(int i=0;i<stu.length;i++) stu[i]=new Student(); 实例化以后就可以使用每一个元素对象。 设计一个雇员类,并创建雇员类的对象数组,输出每个雇员的信息
用户7886150
2021/02/01
3.9K0
Java学习历程之————进阶篇(五)
本周我们学习Java对象的创建,我们在前面进阶篇(一)中已经详细说明了类和对象的区别与联系,大家还记得么?比如“人”是一个类,而编写此篇推文的我和正在看此推文的你都是一个对象,类是一个抽象的概念,而对象就是一个具体的事物。对象是对类的实例化。对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为。Java 对象的生命周期包括创建、使用和清除,本文详细介绍对象的创建,在 Java 语言中创建对象分显式创建与隐含创建两种情况。下面我们分别来说明。
用户5410712
2022/06/01
1890
Java学习历程之————进阶篇(五)
JAVA系列之类加载机制详解
通常,在关于Java的类加载部分会遇到以上疑问,本文将对类加载重要部分做详细介绍,包括重要的基础概念和应用场景,在编写过程中也帮助作者重新熟悉并加固了知识点,希望在看完后对读者能有所帮助。
夕阳也是醉了
2023/10/16
3360
JAVA系列之类加载机制详解
《深入理解java虚拟机》笔记(8)类的加载机制
类加载器将类的.class文件中的二进制数据读入到内存中,将其放在方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。
夕阳也是醉了
2023/10/16
2390
《深入理解java虚拟机》笔记(8)类的加载机制
java 对象转map,去掉null
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/139824.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/24
2.2K0

相似问题

尝试对null对象引用调用虚拟方法'.isPlaying()‘

10

Firebase Flutter错误尝试在null对象引用上调用虚拟方法“java.lang.Class java.lang.Object.getClass()”

238

java.lang.NullPointerException:尝试对null对象引用调用虚方法“”java.lang.Class java.lang.Object.getClass()“”

21

尝试在空对象引用上调用虚拟方法'java.lang.Class java.lang.Object.getClass()‘

11

NullPointerException:尝试对null对象引用调用虚拟方法setLayoutManager

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文