标签: defensive-copy

日历的防御性副本

一直试图找到实现制作Calendar对象防御性副本的方法的最佳方法.

例如:

public void setDate(Calendar date) {
    // What to do.... 
}
Run Code Online (Sandbox Code Playgroud)

我特别关注在检查空输入和制作副本时是否存在线程交错,还是我错过了一些非常明显的东西?

java calendar defensive-copy

17
推荐指数
2
解决办法
1万
查看次数

Java中防御性副本的低效

我是一名长期 C/C++ 程序员,正在学习 Java。我读过有关通过使用返回对私有字段的引用的访问器方法来破坏封装的问题。标准的Java解决方案似乎是防御性复制——调用复制构造函数或clone()来创建字段的副本并返回对该副本的引用。我不明白为什么没有人担心制作防御性副本的低效率。在 C++ 中,访问器只会返回一个指向 const 的指针,从而保护私有成员而不进行复制。为什么Java没有const引用?

java performance defensive-programming defensive-copy

5
推荐指数
1
解决办法
923
查看次数

如何制作对象的防御性副本?

如何制作包含不可变对象中可变字段的可变对象的防御性副本?

class ImmutableObject {

  private final MutableObject immutable_field;

  ImmutableObject(MutableObject y) {
    this.immutable_field = y;
  }
}

class MutableObject {

  public int mutable_field;
}
Run Code Online (Sandbox Code Playgroud)
  • MutableObject没有允许我设置字段的构造函数.
  • MutableObject的当前状态应该在Immutable Object中捕获并且永远不会改变.

java defensive-copy effective-java

3
推荐指数
1
解决办法
2571
查看次数

关于不可变类防御性复制

我有一个关于创建Immutable类的查询.以下是我考虑的要点:

  1. 让课程最终
  2. 使所有成员最终,在静态块或构造函数中显式设置它们
  3. 让所有成员都私密
  4. 没有修改状态的方法
  5. 要非常小心地限制对可变成员组件的访问(请记住该字段可能是最终的,但对象仍然可以是可变的.即私有最终日期imStillMutable) - 请参阅防御性复制或其表兄复制构造函数以获取更多信息.


但是我根本不完全理解这一点,你能告诉或给我一个例子,其中5点在这个例子中是清楚的吗?

java immutability defensive-copy

3
推荐指数
1
解决办法
970
查看次数

将不可变列表传递给ImmutableList.copyOf()?

我有以下代码:

private static final ImmutableMultimap<String, String> namesToAddress;

public static List<String> getAddresses(String name){
  return ImmutableList.copyOf(namesToAddress.get(name));
}
Run Code Online (Sandbox Code Playgroud)

我的问题是防御性copyOf()在这里是必要的,因为get()仍然返回一个不可变列表?

注意我正在使用Google Guava的ImmutableMultiimap.

谢谢.

java immutability guava defensive-copy

0
推荐指数
1
解决办法
535
查看次数