-
clone方法的使用困境--java编程思想第4版(中文)第369页练习1710
问题是这样的:一个定义为 Set union(Set a, Set b) 方法, 它返回a和b的并集。 它返回的Set是通过new HashSet(a)来创建的。 练习17提出一个问题, 要求避免使用new HashSet(a)来创建, 需要使用a.clone()。 并且要求这个方法还能接受EnumSet类型的参数 (EnumSet 实现了Set接口, java 5中的新加的). (第一次提问题, 希望自己描述清楚了!)。 代码如下, 尝试了几种办法, 不能根本上解决问题。
public class Tmp { public static <T> Set<T> union(Set<T> a, Set<T> b) throws Exception { // 直接新建一个HashSet当然没有问题 Set<T> res = new HashSet<T>(a); // TODO. // 怎么搞?? 避免直接新建一个HashSet // ... // !编译不通过. 因为 Set接口里面没有clone方法 // res = a.clone(); // !向上转型成Ojbect对象, 这种做法也行不通. 因为不能直接调用Object对象的clone方法 // res = ((Object) a).clone(); // 试试使用反射. 貌似可以 // 但遇到EnumSet.of(Color.RED)作为参数a时, // 会报错. // java.lang.NoSuchMethodException: java.util.RegularEnumSet.clone() // System.out.println("a的类型 " + a.getClass()); // Method m = a.getClass().getDeclaredMethod("clone"); // res = (Set<T>)m.invoke(a); // !向上转型成一个Clonable接口?? // 这个是标记接口. 根本就没有clone方法 // res = ((Clonable) a).clone(); res.addAll(b); return res; } public static void main(String[] args) throws Exception { // 使用HashSet, ok Set<Integer> a = new HashSet<Integer>(); Set<Integer> b = new HashSet<Integer>(); a.add(1); b.add(2); System.out.println(a); System.out.println(b); System.out.println(union(a, b)); // 使用EnumSet, 在union方法中直接新建一个HashSet没问题, // 但使用clone就有问题了 System.out.println(union((Set<Color>) (EnumSet.of(Color.RED)), (Set<Color>) (EnumSet.of(Color.BLACK)))); } } enum Color { RED, WHITE, BLACK, }
2012年8月11日 12:06
1个答案 按时间排序 按投票排序
-
企图下载教材看看题目,但没能找到有那道题的教材。
看了遍那个章节的内容,我猜测无外乎以下三种的一种
- 如果题目说定就是HashSet的话,那么直接造型后clone好了。if (a instanceof HashSet) { res = (Set) ((HashSet) a).clone(); }
类似这样。比较难看。
- 用反射。你也提到了。
for (Method m : a.getClass().getMethods()) { if (m.getName().equals("clone")) { res = (Set) m.invoke(a); break; } }
类似这样。没发生你说的会报错。
- 如果题目中要求深层copy,用书中那个序列化后反序列化方法。长长的就不贴了。
我觉得这种没必要。2012年8月11日 15:13
相关推荐
详细的描述了Java中 clone方法使用
darts-clone-java 用Java编写的Double-ARray Trie System克隆。 该库基于称为“快速高效”库的 。入门设置要使用Maven添加依赖项,请使用以下命令: < dependency> < groupId>...
在Java编程语言中,`clone`是一个非常重要的概念,它涉及到对象复制和对象克隆。本文将深入探讨Java中的`clone`方法,包括其工作原理、使用场景、注意事项以及一些个人实践心得。 首先,让我们理解什么是`clone`。...
2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 总结...
Java中的clone方法详解_动力节点Java学院,动力节点口口相传的Java黄埔军校
本资料"Java中clone方法共6页.pdf.zip"可能包含了关于如何理解和使用`clone()`方法的详细解释,以及它在实际开发中的应用示例。 `clone()`方法的主要用途是创建一个现有对象的副本,这个副本与原始对象具有相同的...
在本压缩包"Darts-Clone-Java-Master.zip"中,包含了Java实现的DARTS算法源代码,非常适合初学者深入理解和实践时间序列分析。 DARTS的核心思想是通过自回归模型(AR,AutoRegressive)来预测未来的值,其中每个...
《Java编程思想》第四版是 Bruce Eckel 的经典著作,这本书深入浅出地介绍了Java语言,深受广大开发者喜爱。"tij4-code:java编程思想第四版-GIT" 指的是该书的源代码已经托管在了Git版本控制系统中,方便读者查阅和...
Java是一种广泛使用的编程语言,以其跨平台、面向对象的特点深受开发者喜爱。本教程将深入探讨Java中的数组、方法以及面向对象编程的基础概念,为初学者提供一个全面的学习指南。 一、数组 数组在Java中是存储同一...
在Java编程语言中,`clone()`方法是一个非常重要的概念,特别是在对象复制和克隆方面。这个小例子将帮助初学者理解如何在Java中使用`clone()`来创建对象的副本。让我们深入探讨`clone()`方法以及它在实际编程中的...
### Java中的`clone`方法详解:浅拷贝与深拷贝 #### 一、引言 在Java中,`clone`方法提供了一种快速复制对象的方式。它属于`Object`类的一部分,但需要显式地在子类中声明并实现`Cloneable`接口才能正常使用。本文...
Java中的`clone`方法是Java语言提供的一种复制对象的方式,它允许创建一个对象的副本,这个副本与原对象具有相同的属性值,但它们是两个独立的对象,修改副本不会影响原对象。`clone`方法存在于Java的`java.lang....
GRPC-Java 源码环境构建 GRPC-Java 源码环境构建是一个相对复杂的过程,需要具备一定的技术基础和经验。本文将详细介绍 GRPC-Java 源码环境构建的步骤和过程,旨在帮助读者快速搭建 GRPC-Java 源码环境。 一、...
在Java编程语言中,`Cloneable`接口和`clone()`方法是两个重要的概念,它们用于对象复制。在本文中,我们将深入探讨Java中的浅克隆(shallow clone)和深克隆(deep clone),并结合测试代码进行分析。 首先,让...
在Java编程语言中,克隆(Clone)机制是一种创建对象副本的方法,它允许开发者创建一个已有对象的新实例,这个新实例与原对象具有相同的属性值,但却是两个独立的对象,彼此的操作不会互相影响。克隆机制在某些情况...
NX二次开发UF_CLONE_ask_clone_related_dwgs 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域...
NX二次开发UF_CLONE_ask_clone_related_cae 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的...
NX二次开发UF_CLONE_set_clone_related_cae 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的...
NX二次开发UF_CLONE_set_clone_related_dwgs 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域...
Clone Detection in Secure Messaging- Improving Post-Compromise Security in Practice