static inner class和非static inner class的实例化问题(can only instantiate non-static inner class...)

2019-09-26 18:58:25

前言:过年回来,项目突然报错:can only instantiate non-static inner class... 


代码如下:


/**

 * @author fandong

 * @create 2018/12/10

 */

@Data

public class QuestionnaireAttribute {

 

   

 

    public QuestionnaireAttribute() {

    }

 

    @Data

    public class StartAndEndTime{

 

        private String startTime;

 

        private String endTime;

 

    }

 

}

Spring Boot 接收到Json参数后,无法构造 StartAndEndTime类的实例,过了个年,第一天上班头晕呼呼的,一时有点懵。


原因:后来想想,其实是序列化框架 无法构造 非静态内部类 StartAndEndTime的实例,加个 static 将其声明为 静态内部类就可以了。


这里不得不说下 static inner class 和 non-static inner class 构造实例的区别:


static inner class 可以直接调用构造器构造,如下:


QuestionnaireAttribute.StartAndEndTime startAndEndTime = new QuestionnaireAttribute.StartAndEndTime();

non-static inner class 需要持有外部类实例的引用,所以无法直接调用构造器创建,需要先构造外部类实例,然后通过外部类实例调用构造方法创建,如下:


QuestionnaireAttribute questionnaireAttribute = new QuestionnaireAttribute();

QuestionnaireAttribute.StartAndEndTime startAndEndTime = questionnaireAttribute.new StartAndEndTime();

日常使用的话一般 static inner class比较多,所以一时遇到 non-static inner class的实例化会有点懵,😄


  • 2019-05-07 00:04:04

    Tcpdf不使用css来实现线上合同和签章,图片悬浮

    以前虽然有了解过Tcpdf的用法,但是没有实际的应用过,最近在用tcpdf的时候发现对css支持很有限,使的如果想实现类似html的种种效果都很难,而我这次要做的就是 图片悬浮在文字上方形成类似水印或者盖章的效果。

  • 2019-05-09 11:46:30

    Glide使用高级技巧(解决Glide生成缓存Key问题)

    虽说Glide将缓存功能高度封装之后,使得用法变得非常简单,但同时也带来了一些问题。 比如之前有一位群里的朋友就跟我说过,他们项目的图片资源都是存放在七牛云上面的,而七牛云为了对图片资源进行保护,会在图片url地址的基础之上再加上一个token参数。也就是说,一张图片的url地址可能会是如下格式:

  • 2019-05-13 14:34:42

    linux系统中清理MySql的日志文件,打印日志文件

    默认情况下mysql会一直保留mysql-bin文件,这样到一定时候,磁盘可能会被撑满,这时候是否可以删除这些文件呢,是否可以安全删除,是个问题。 首先要说明一下,这些文件都是mysql的日志文件,如果不做主从复制的话,基本上是没用的,虽然没用,但是不建议使用rm命令删除,这样有可能会不安全,正确的方法是通过mysql的命令去删除。

  • 2019-05-14 16:47:27

    数据库整理碎片

    最后还是用的ALTER TABLE来修改的,不知道为什么有时候管用,有时候不管用。

  • 2019-05-17 16:27:26

    在vue项目里面使用引入公共方法

    今天早上来到公司,没事看了一下别人的博客,然后试了一下,发现的确是可以的,在此记录一下,方便自己日后查阅。 首先新建一个文件夹:commonFunction ,然后在里面建立 一个文件common.js