如何从试图调用Java克隆方法的Clojure代码中删除反射警告:
(defn clone-foo [m]
(.clone m))
=> Reflection warning, NO_SOURCE_PATH:2 - reference to field clone can't be resolved.
当然,如果m是java.lang.Object
的任何实例,它必须具有clone
方法吗?
是否与clone
受保护有关?
答案 0 :(得分:2)
是的,您无法在任意clone()
上拨打Object
。而且,由于clone()
没有公开Cloneable
方法,因此以“通用”方式克隆事物有点困难。这是java早期的剩余部分之一,现在为时已晚,无法改变。如果你控制了你需要克隆的所有对象,你可以创建自己的ReallyCloneable
接口来公开clone()
方法,或者你可以用反射来玩自己的技巧。