小编ohy*_*zai的帖子

为什么不在Java中编译"array instanceof Iterable"?

Object[] array = new Object[]{};
System.out.println((array instanceof Serializable));//passed
System.out.println((array instanceof Cloneable));//passed
Run Code Online (Sandbox Code Playgroud)

此代码编译并运行.输出是:

true
true
Run Code Online (Sandbox Code Playgroud)

但是,此代码无法编译:

System.out.println((array instanceof Iterable));//not passed
Run Code Online (Sandbox Code Playgroud)

Eclipse编译器报告:

不兼容的条件操作数类型Object []和Iterable

我发现只能在接口SerializableCloneable使用操作之间比较数组instanceof.有人可以告诉我为什么吗?

java arrays compiler-errors

16
推荐指数
2
解决办法
1770
查看次数

这是对象的安全发布吗?

我有一个课程项目

class Item {
  public int count;
  public Item(int count) {
    this.count = count;
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,我将在其他类的字段中引用Item

class Holder {
  public Item item;
  public Holder() {
    item = new Item(50);
  }
}
Run Code Online (Sandbox Code Playgroud)

这个新的Item对象可以安全发布吗?如果没有,为什么?根据Java Concurrency in Practice,新的Item是在没有完全构造的情况下发布的,但在我看来,新的Item是完全构造的:它的this引用不会被转义,并且它的引用和它的状态同时发布,所以消费者线程不会看到过时的价值.或者是可见性问题.我不知道原因.

java multithreading

7
推荐指数
2
解决办法
1527
查看次数

标签 统计

java ×2

arrays ×1

compiler-errors ×1

multithreading ×1