当前位置: 首页 > 面试题库 >

从接口实现方法但参数不同

汤念
2023-03-14
问题内容

我正在寻找一种在接口中定义但具有不同参数类型的相同方法的不同实现的好方法。这可能吗?

为了澄清这一点,假设我有一个数据库接口和两个实现类Database1和Database2。数据库有一个方法createNode(…)和另一个方法ModifyNode(…)。问题在于,对于Database1,createNode方法的返回类型应为long(标识符)。但是,对于Database2,它将是技术中特定的对象(在这种情况下为OrientDB,但这没有太大关系,当然,它只是对Object的扩展)。并且两个create(…)返回类型都应用作ModifyNode(…)参数之一。

我当时想做的是:

`public interface Database {
    public Object createNode(...);
    public void modifyNode(Object id, ...);
    ...
 }`

public class Database1 { 
    @Override
    public Object createNode(...) { 
        ...
        long result = // obtain id of created node
        return Long.valueOf(result);
    }

    @Override
    public void modifyNode(Object id, ...) { 
        ...
        // use id as ((Long)id).longValue();
    }
}

public class Database2 { 
    @Override
    public Object createNode(...) { 
        ...
        SomeObject result = // obtain id of created node
        return result;
    }

    @Override
    public void modifyNode(Object id, ...) { 
        ...
        // use id as (SomeObject)id
    }
}

我想知道是否有更好的方法可以做到这一点。特别要避免Long-> long和long->
Long转换。我在StackOverflow中看到了许多类似的问题,但这些都不是我想要的。提前非常感谢您。


问题答案:

这是泛型的一个例子

数据库

public interface Database<T> {
    public T createNode(...);
    public void modifyNode(T id, ...);
    ...  
}

数据库1

class Database1 implements Database<Long> { 
    @Override
    public Long createNode(...) { 
        ...
        long result = // obtain id of created node
        return result;
    }

    @Override
    public void modifyNode(Long id, ...) { 
        ...
        // use id
    }
}

数据库2

public class Database2 implements Database<SomeObject> { 
    @Override
    public SomeObject createNode(...) { 
        ...
        SomeObject result = // obtain id of created node
        return result;
    }

    @Override
    public void modifyNode(SomeObject id, ...) { 
        ...
        // use id as (SomeObject)id
    } 
}

顺便说一句,不用担心自动装箱。您正在使用JDK>
= 5,因为有@Override注释。



 类似资料:
  • 问题内容: 我有以下类和接口: 我想创建一个方法,其中参数需要为BasicObject类型并实现CodeObject。我尝试了以下代码,但不能保证clazz是实现CodeObject的类。 我想做这样的事情,但不能编译: 问题答案: 您的模式类必须扩展和扩展/实现(实际上是一个接口)。您可以使用方法签名的通配符定义中声明的多个类来执行此操作,如下所示: 请注意,如果您通过以下任何一种方式进行操作,

  • 我有以下类和接口: 我想创建一个方法,其中参数需要是BasicObject类型,并实现CodeObject。我尝试了以下代码,但它不能保证clazz是一个实现CodeObject的类。 我想做这样的事情,但它无法编译:

  • B类: 如何影响这个界面?

  • Override Method可以实现接口方法也可以覆写父类的方法,但Implement Methods只能实现接口方法 操作步骤: 菜单栏: Code —> Implement Methods 快捷键: Mac: control + L Windows\/Linux: Ctrl + I

  • 问题内容: 在Java中,当接口扩展另一个接口时: 为什么要实现其方法? 当接口不能包含方法主体时,如何实现其方法 当扩展另一个接口而不实现它时,如何实现这些方法? 接口实现另一个接口的目的是什么? 这是Java的主要概念! 编辑: 在eclipse中,除了中的实现方法之外,还有实现符号。 当我将鼠标悬停在它上面时,它表示它实现了该方法!!! 问题答案: 为什么要实现其方法?当接口不能包含方法主体

  • 问题内容: 我有一个定义方法的接口。我有一个 实现 此接口的结构。在其中,我已经从该接口实现了方法,并且还定义了其他方法。 例如: 在操场上:https : //play.golang.org/p/B1GgoNToNl_l 在此,WagTail()不是Animal接口的一部分,但属于Dog结构。运行此代码会出现错误 dog.WagTail未定义(动物类型没有字段或方法WagTail)。 有没有一种