我想知道是否有推荐的方法在java中进行深度克隆/复制实例.
我有三个解决方案,但我可以错过一些,我想得到你的意见
编辑:包括Bohzo的提议和改进问题:它更多的是深度克隆而不是浅层克隆.
在属性之后通过hand属性编写克隆代码并检查是否也克隆了可变实例.
亲:
- 控制将要执行的操作
- 快速执行
缺点:
- 编写和维护繁琐
- 容易出错(复制/粘贴失败,缺少属性,重新分配的可变属性)
使用您自己的反射工具或外部帮助程序(如jakarta common-beans),可以轻松编写一个通用的复制方法,该方法可以在一行中完成工作.
亲:
- 易于编写
- 没有维护
缺点:
- 对发生的事情的控制较少
- 如果反射工具也没有克隆子对象,则容易出现可变对象的错误
- 执行速度较慢
使用为您执行此操作的框架,例如:
commons-lang SerializationUtils
Java Deep Cloning Library
Dozer
Kryo
亲:
- 与反思一样
- 更多地控制将要克隆的内容.
缺点:
- 即使在层次结束时,每个可变实例都被完全克隆
- 执行起来可能非常慢
javassit,BCEL或cglib可能用于生成专用克隆器,只需单手写入.为此目的,有人知道使用这些工具之一的lib吗?
我错过了什么?
你会推荐哪一个?
谢谢.
所以我一直在阅读Cloud Foundry,但我仍然对它是什么感到困惑.这是我对CF上的PaaS的看法,希望你们能告诉我,如果我错了,并解释一下它好一点.
传统的PaaS产品如Microsoft Azure或Google AppEngine提供了一个完整的平台来开发,测试,托管和管理您的Web应用程序.但是,您必须使用他们的API,并且仅限于他们提供的服务以及他们支持的语言/框架.
Cloud Foundry似乎是某种"中间人",它允许您的应用程序使用来自许多公共云的服务.它是如何实现这一目标的?您使用的是单个API吗,比如LibCloud或JCloud?例如,您可以使用来自一个提供商的一项服务和另一家提供商的另一项服务吗?Cloud Foundry本身是否提供任何服务,还是只是一个中间人,允许您轻松地从一个平台迁移到另一个平台,并在一个应用程序中使用来自不同提供商的不同服务组合?
我想在我的PATH中添加一些dirs.不幸的是,这些目录位于包含空间的Windows路径中(如文档和设置)
我没有尝试过:
创建一个变量:
43598811@E250BZD20015026 ~
$ winhome="/cygdrive/c/Documents\ and\ Settings/43598811/"
43598811@E250BZD20015026 ~
$ cd $winhome
bash: cd: /cygdrive/c/Documents\: No such file or directory
43598811@E250BZD20015026 ~
$ cd "$winhome"
bash: cd: /cygdrive/c/Documents\ and\ Settings/43598811/: No such file or directory
Run Code Online (Sandbox Code Playgroud)
创建别名:
43598811@E250BZD20015026 ~
$ alias winhome="/cygdrive/c/Documents\ and\ Settings/43598811/"
43598811@E250BZD20015026 ~
$ winhome
bash: /cygdrive/c/Documents and Settings/43598811/: is a directory
43598811@E250BZD20015026 ~
$ cd winhome
bash: cd: winhome: No such file or directory
Run Code Online (Sandbox Code Playgroud)
使用软链接: 它正在工作......但我不想使用它
有什么建议吗?
你认为删除maven pom中可以找到的每个传递依赖是一个好习惯吗?
示例:
我的项目依赖于A和B.
B也是A的传递依赖.
我应该将B保留在我的pom中还是删除它?
什么是最好的:
拥有所有已知的罐子,甚至是传递的罐子,在pom上宣布或只保留顶级罐子?
这有点主观,但我试图用一些传递依赖来清理一些巨大的poms(父母和孩子).我想让我的pom尽可能简单,但我也希望它们可以维护.
有什么办法在Linux发行版中制作二进制文件并在具有相同架构的另一个发行版上运行它?或者我应该在不同的发行版上编译和构建它?
Redhat,基于Debian的二进制文件发行版之间是否有任何兼容性?(我想在fedora上使用我的Ubuntu二进制文件!)
在我的一些项目和一些书中据说不使用内部类(匿名或不是静态或不静态) - 除了在某些限制条件下,如EventListeners或Runnables - 是最佳实践.他们甚至在我的第一个行业项目中都是"禁止".
这真的是最佳做法吗?为什么?
(我不得不说我经常使用它们......)
- 编辑---
我无法在所有这些答案中选择正确的答案:大部分都是正确的部分:我仍然会使用内部课程,但我会尽量少用它们!
我正在尝试减少maven pom文件中的复制/粘贴.
我们有一个主要的pom和许多继承自主人的儿童项目.
我想分享一个复杂的插件定义,如下所示:
<plugins>
...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<configuration>
<!-- many xml lines here -->
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>assemble</goal>
<goal>generate-daemons</goal>
<goal>create-repository</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.codehaus.mojo.appassembler</groupId>
<artifactId>appassembler-booter</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</plugin>
...
</plugins>
Run Code Online (Sandbox Code Playgroud)
当这个插件定义在项目pom中时,打包工作做得很好.
当定义移动到父pom(in或in)时,甚至不会启动包装.
是否可以共享插件配置?怎么样 ?
- 在第一个答案后编辑---
我尝试了以下内容:
- 将我的XL包装插件配置放在我父pom的元素中
- 在我的项目pom中添加以下元素:
<plugins>
...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
</plugin>
...
</plugins>
Run Code Online (Sandbox Code Playgroud)
但它不起作用......那有什么不对?
- 最后编辑 - 我想我得到了什么问题:
插件重用声明应该在配置文件构建中声明.
我在一个始终启用的插件中完成了它,现在它正常工作.
非常感谢.
我正在使用PMD为项目生成一些代码质量报告.
我不理解NPath复杂性检查的结果.
我已经创建了一个dull类,它显示了结果(这不是真正的类,但它使用相同的模式):
import java.util.*;
public class SOFExample {
private final Map<String, Date> magicMap = new HashMap<String, Date>();
protected static final long UNKNWOWN = 0L;
private static final class MyCal { long aTime; long bTime; long cTime; long dTime;}
public void usefullMethod(final List<MyCal> myCals) {
final Date a = magicMap.get("a");
final Date b = magicMap.get("b");
final Date c = magicMap.get("c");
final Date d = magicMap.get("d");
final long aTime = a == null ? UNKNWOWN : a.getTime();
final long bTime = …Run Code Online (Sandbox Code Playgroud) 你知道一个好的java对象图访问者库吗?
我想访问一个对象及其子组件,并在匹配某些条件时执行一些操作.
用法示例:
nullSet的TreeSet实例替换每个.我想要一个库,而不是自定义代码,因为遍历一个Object图可能很棘手.你必须处理集合,数组,代理等...我已经考虑过重用XStream的一部分来实现这一点,但它看起来并不那么容易:Xstream访问者更倾向于对象转换而不是对象自我修改.
java ×4
maven-2 ×2
bash ×1
clone ×1
cloud ×1
cygwin ×1
dependencies ×1
distribution ×1
linux ×1
object-graph ×1
paas ×1
path ×1
performance ×1
plugins ×1
pmd ×1
prototype ×1
service ×1
visitor ×1