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-21 12:43:26

    (重要)RecycleView的缓存机制

    RecycleView的四级缓存是由三个类共同作用完成的,Recycler、RecycledViewPool和ViewCacheExtension。Recycler用于管理已经废弃或者与RecyclerView分离的ViewHolder,这里面有两个重要的成员,为可以看见的屏幕的内部缓存成员mAttachedScrap、mChangedScrap和滑出屏幕外的外部缓存成员mCachedViews二者共同完成ViewHolder的缓存;RecycledViewPool类是用来缓存整体所有的ViewHolder,是对mCachedViews缓存的补充;ViewCacheExtension是扩展内的缓存对象,默认不加载,需实现方法getViewForPositionAndType(Recycler recycler, int position, int type)来实现自己的缓存。接下来对四级缓存一步步介绍。

  • 2019-05-21 12:44:31

    对嵌套RecyclerView的优化

    RecyclerView 是一个更高级的 ListView ,它可以重用view避免额外创建太多的view从而带来流畅的滚动性能。RecyclerView通过叫做 View pool 的东西持有不再可见的 view ,让它可被回收

  • 2019-05-25 14:54:50

    commit your changes or stash them before you can merge

    Your local changes to the following files would be overwritten by merge:         protected/config/main.php Please, commit your changes or stash them before you can merge. --------------------- 作者:陈小峰_iefreer 来源:CSDN 原文:https://blog.csdn.net/iefreer/article/details/7679631 版权声明:本文为博主原创文章,转载请附上博文链接!

  • 2019-05-27 10:43:34

    IntelliJ IDEA中C盘文件过大怎么办

    当我在D:\ 安装完IDEA9.0之后,建立了一个工程,发现C:\Users\Administrator\.IntelliJIdea90 竟然增大到了500+M,并且随着使用在逐渐增大,这样占用系统盘资源是非常让人不爽的,那么如何将其修改到其他路径呢?

  • 2019-05-28 13:33:20

    BRVAH+MTRVA,复杂?不存在的

    言归正传,这样的一个首页,我们需要做怎么样的基础工作呢?或者说,碰到以后更复杂的页面我们应该怎么做?这里小提示下,不要再用什么类似ScrollView的这种东西了,诶,好像说的有点绝对,尽量不要用,这不是谷歌想要看到的,5.0谷歌推出了RecyclerView,从它的整个设计架构来看,简直就是为这而生的。而RecyclerView的视图是通过Adapter来渲染的。原始的Adapter,让人很蛋疼,重复工作太多,我们应该要有封装的思想,把最需要的部分提供出来,其它不用管。