首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >实现实现接口的类的copy方法-- Java

实现实现接口的类的copy方法-- Java
EN

Stack Overflow用户
提问于 2018-10-13 03:29:27
回答 1查看 508关注 0票数 2

我有一个奇怪的情况,我有一个实现接口TheInterface的TheClass类,而TheClass类应该有一个返回类型为TheInterface的copy()方法,并且它应该做一个浅层的自我复制。当尝试调用我的函数copy()并使用它时,我得到一个不兼容的类型错误。我需要保持copy()方法的返回类型不变。

有什么方法可以做到这一点吗?

谢谢

代码语言:javascript
复制
class TheClass implements TheInterface,Cloneable {


private Set<Integer> set;

public TheClass(){
    set=new HashSet<Integer>();
}

public TheInterface copy() {
    TheInterface clone = this.clone();
    return clone;
}

protected A clone(){
    A clone;
    try
    {
        clone = (A) super.clone();
    }
    catch (CloneNotSupportedException e)
    {
        throw new Error();
    }
    return clone;
}

在这里我得到了不兼容的类型错误

代码语言:javascript
复制
public class Main  {
public static void main(String[] args) {
    TheClass class1 = new TheClass();
    TheClass class2 = class1.copy();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-13 03:44:38

部分改进可能是使TheClass中的copy()返回TheClass,而接口中的方法仍然返回TheInterface。这是允许的,因为返回类型不是Java方法签名的一部分。

通过这种方式,您可以

代码语言:javascript
复制
TheClass class1 = new TheClass();
TheClass class2 = class1.copy();

但是,如果您在(静态)类型为TheInterface的变量上调用copy(),则仍然需要将其赋给TheInterface (但这似乎是合理的):

代码语言:javascript
复制
TheInterface class1 = new TheClass();
TheInterface class2 = class1.copy(); // cannot be TheClass in this case
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52785904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档