小编sev*_*ang的帖子

Java中可变对象的封装

我正在学习"Java SE 7程序员I和II学习指南",我不明白下面的解释.

class Fortress{
  private String name;
  private ArrayList<Integer> list;

  Fortress?? {list=new ArrayList<Integer>;

  String getName{return name;}
  void addToList(int x){list.add(x);}
  ArrayList getList(){return list;} // line 1
}
Run Code Online (Sandbox Code Playgroud)

哪行代码打破了封装?答案:第9行."当封装像ArrayList这样的可变对象时,你的getter必须返回对对象副本的引用,而不仅仅是对原始对象的引用".

我没有理解解释或如何修改原始代码.

所以在getList()而不是

return list;
Run Code Online (Sandbox Code Playgroud)

我们应该这样做吗?

ArrayList<Integer> list2=list;
return list2;
Run Code Online (Sandbox Code Playgroud)

java encapsulation mutable immutability

4
推荐指数
1
解决办法
767
查看次数

Java Instanceof方法混淆

假设我们有以下定义.

interface Vessel{}
interface Toy{}
class Boat implements Vessel{}
class Speedboat extends Boat implements Toy{}
Run Code Online (Sandbox Code Playgroud)

主要是,我们有这些:

Boat b = new Speedboat();
Run Code Online (Sandbox Code Playgroud)

(b instanceof Toy)评估为true?为什么?我的理解是,引用类型bBoat,但Boat与之无关Toy,所以它应该是,false但答案是true.

java boolean interface instanceof

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