[FindBugs分析记录]Class defines clone() but doesn't implement Cloneable
2024-10-18 18:28:51
官网解释:
This class defines a clone() method but the class doesn't implement Cloneable. There are some situations in which this is OK (e.g., you want to control how subclasses can clone themselves), but just make sure that this is what you intended.
什么代码会引起这个问题呢?先看下面:
class MyTest { public MyTest clone(){ MyTest myTest = new MyTest(); return myTest; } }
这段代码会引起FindBugs的这个警告,为什么?请看下面解释:
1.根据FindBugs的说明,如果一个类重写clone()函数,而不继承Cloneable接口,是一定有问题的,如果clone()方法只是简单进行克隆,如:new一个对象并初始化,然后返回这个新创建的对象的话,不继承Cloneable接口也是可以的。
2.如果是上面这样的话,为什么还要继承Cloneable接口呢?稍微说一下,Cloneable接口是不包含任何方法的!其实这个接口仅仅是一个标志,而且这个标志也仅仅是针对Object类中clone()方法的,如果clone类没有实现 Cloneable接口,并调用了Object的clone()方法(也就是调用了super.Clone()方法),那么Object的clone() 方法就会抛出CloneNotSupportedException异常。Cloneable用法
3.所以这里建议是:规范写法,如果重写clone(),最好继承Cloneable接口。
class MyTest implements Cloneable{ public MyTest clone(){ MyTest myTest = new MyTest(); return myTest; } }
最新文章
- ASP.NET Web API 配置 JSONP
- ROCKETMQ源码分析笔记2:client
- DOM--4 响应用户操作和事件(1)
- ORACLE 學習筆記
- MonkeyRunner学习(2)常用命令
- 【WildCard Matching】cpp
- [转]微软联合CSDN英雄在线编程大赛
- 李洪强iOS开发支付集成之支付宝支付
- Web API 依赖注入与扩展
- WIN8+VS2013编写发布WCF之一(编写)
- Jquery手机发送短信之后,进入倒计时状态
- PHPUnit-附录 A. 断言 (assert)
- ECMAScript课程
- Head First Java.(第2版)
- 部署MySQL5.7时的权限问题
- javascript 模拟日历
- Python图形编程探索系列-08-再次认识标签
- 使用node和express+mongodb实现数据增删改功能
- False Ordering LightOJ - 1109(暴力。。唉,。又是一个水题。。)
- fn project Message Queues 配置