public class Student {
private Student() {
throw new IllegalArgumentException("can not create.");
}
public String name;
}
如何使用Java代码创建一个Student对象?
更多问答 >>
-
每日一问 | 曾经的记忆中“onSaveInstanceState 会在系统意外杀死 Activity 时调用”,正确吗?
2020-07-12 23:49 -
每日一问 | Android P 上,需要配置 network_security_config ,才能抓包,正确吗?
2020-06-29 21:26 -
2020-07-08 23:05
-
每日一问 | RecyclerView的多级缓存机制,每级缓存到底起到什么样的作用?
2020-07-19 23:56 -
每日一问 | 比 removeView 更轻量的操作,你了解过吗?
2020-07-27 01:14 -
每日一问 | Activity与Fragment的那些事,“用起来没问题,我都要走了,你崩溃了?”
2020-06-22 00:39 -
2020-06-07 20:55
-
每日一问 在 Java 支持了 switch(字符串)之后,只是语法糖而已?
2020-06-01 00:55 -
2020-05-25 23:08
-
每日一问 | 我们常说的dalvik虚拟机是基于寄存器的,而jvm是基于栈,到底指的是什么?
2020-05-20 21:29
代码:
终端输出:
哈哈哈哈哈哈,原理:
那个UnsafeAllocator类,是在Gson库里面的:它是一个抽象类,不过有提供一个静态方法,这个方法里面会即时创建一个匿名内部类,继承UnsafeAllocator并实现了那个抽象方法——
可以看到,它内部其实是依赖Unsafe这个类(它里面有一系列直接操作内存的方法,非常强大,感兴趣的同学可以去了解下)的newInstance
。allocateInstance
方法来实现的(通过这个方法创建的对象甚至连目标类的【初始化块】代码都不会走),我们只需要传一个Class进去就行了。当然了,这个方法也不是万能的,比如:看上面的
newInstance
方法,在通过反射调用Unsafe的allocateInstance
之前,会做一个检查(调用assertInstantiable
方法):检测到目标Class是接口或抽象类,会直接抛出异常。
总结:
在日常开发中,如果碰到一些类,在创建对象时就抛异常了,而且无法通过继承来解决的时候,怎么绕过这个会出错的构造方法来创建对象呢?allocateInstance
方法来实现;或抄袭一下就行了,非常方便。不过,如果创建对象时绕过了构造方法,那么一些初始化的工作,就要自己手动去做了。
小缘终于来了,我也写了篇, 周一发。
期待鸿神的答案~
快发
好久没来了啊,小缘不来很多问题都没多少人答了~
对8起,前段时间有点多事
是我就会新建一个类Student2,然后把里面的代码复制一遍过来改,删除
throw new IllegalArgumentException("can not create.");
,简单暴利,易扩展如果Student被别的类引用了,你这个Student2就不能达到预期效果了
我以为就我一个人喜欢这么干[狗头]
哈哈, 简单粗暴~
那就通过asm 把 throw new IllegalArgumentException("can not create."); 这一行干掉,重新生成一个jar ...查看更多
那就通过asm 把 throw new IllegalArgumentException("can not create."); 这一行干掉,重新生成一个jar
不知道有什么方式能创建Student对象。
Java创建对象的四种方式: