【问题标题】:Clone method on java interfacejava接口上的克隆方法
【发布时间】:2012-09-13 21:18:36
【问题描述】:

我有以下问题;

我有公共方法 clone() 的接口:

public interface Something {
    Something clone();
}

还有

public class SomethingImpl implements Something {

        private Something some;

    public Something clone() {
        return some.clone();
    }
}

每当我从某处的代码运行时

...
Something i =  new SomethingImpl();
...
// do something on i
...
someMethod(i);
...

public void someMethod(Something some){
    Something some2 = some.clone(); 
  }

我在 Someting some2 = some.clone; 线上的线程“main”java.lang.NullPointerException 中遇到异常;

我编写了很多业务逻辑,但直到现在我还没有遇到过克隆的必要性,尤其是这种方式。

有人能指出我应该往哪个方向走吗?我试图阅读有关该主题的文章,但变得更加困惑。

提前致谢, 英里

【问题讨论】:

  • 我没有看到 Something 有(静态和最终)clone 字段。
  • 这甚至是如何编译的?请发布您的所有代码。
  • 我怀疑异常出现在 SomethingImpl.clone() 方法中,因为 some 字段从未初始化。无论如何......你想做什么?

标签: java interface clone


【解决方案1】:

根据你的例子,唯一的方法

public void someMethod(Something some){
    Something some2 = some.clone(); 
}

如果您将 null 传递给 someMethod(Something some),则可以抛出 NullPointerException

【讨论】:

  • someMethod(Something some) 中的 some 不为 null - 没关系,但是当我在其上调用 .clone() 时 - 克隆方法返回 null 或在某些情况下,当我调用 `public Something clone() { try { return (Something) super.clone(); } catch (CloneNotSupportedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } return some /* local - private 一些东西; */; }` retrns CloneNotSupportedException ... :( 抱歉,我找不到在评论中插入 code 的方法
【解决方案2】:

方法和字段是两个不同的东西。 clone 是一个未定义的字段,因此将不存在。 clone() 是一种方法。你是说Someting some2 = some.clone()吗?

编辑我刚刚看到你的实际错误(尽管我上面所说的仍然应该注意!)。这意味着some 必须是null - 您是否可能在您省略的代码部分中更改它的值?每当您收到 NullPointerException 时,请务必检查一下。

【讨论】:

  • 这不能解释空指针。他的例外意味着some 为空。你描述的那个错误他还没有遇到过。
  • 我什至不明白它是如何编译的。
  • 我认为some.clone 是他以某种方式复制/粘贴代码时创建的错字。
  • some.clone 应该是 some.clone();是打字错误。接口还有其他一些方法——不仅克隆,而且一切正常,只是这种克隆让我头疼。抱歉,如果我不清楚,但这是我能描述的最好的问题。
  • 另外——传递给方法的一些不是空的
猜你喜欢
  • 2011-10-07
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 2012-09-14
  • 2012-12-18
  • 2018-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多