java - 在方法中实现带有附加参数的接口(interface)

标签 java class interface overriding abstract-class

我有一个实现接口(interface) IResp 的类 MyClass

public interface IResp {
    Response onResp(String a, String b)
            throws Throwable;
}
public class MyClass implements IResp {

    public onResp(String a, String b, String c) throws Throwable {
...
}

我需要在 MyClassonResp 方法中添加额外的 String c

现在,我知道我可以通过添加未实现的 onResp(String a, String b) throws Throwable{...} 或创建 MyClass 来实现这一点一个抽象类。

由于我是 Java 的新手,我想就更好的方法提出一些建议,好吗?

注意:我只能对类进行更改,不能创建或修改接口(interface)

最佳答案

如果您“实现”了一个接口(interface)方法,并更改了参数签名(如添加第三个字符串),则这不再是该接口(interface)的有效实现。你必须有一个像

这样的方法
public Response onResp(String a, String b) {
    // ...
}

在你的 MyClass 中。

I need the additional String c in onResp method of MyClass

IResp 接口(interface)很可能存在,因为有 onResp() 方法的调用者,他们将提供两个字符串,而不是三个。如果您的 onResp() 代码在没有获取额外信息 (String c) 的情况下真的无法工作,那么您就有问题了。

你的提议都行不通(如果我理解正确的话):

  • 如果您只是添加一个空的 onResp(String a, String b) 方法,那么该方法将从外部调用,什么都不做并返回。
  • 如果您将MyClass 声明为抽象的,那么您将无法创建MyClass 的实例,并且如果没有此类的实例,则什么都不会得到打电话。

一种(理论上?)可能性是将接口(interface)方法更改为使用三个参数而不是两个参数,并修改接口(interface)的所有调用者以提供预期信息作为第三个参数。但我想接口(interface)是固定的,你不能随意这样做。

如果您可以在所有 onResp() 调用中使用完全相同的 c 值,则可以提供额外的 String c 而不是每个onResp() 调用,但提前,当您创建 MyClass 实例时,执行 new MyClass("abc"),假设“abc"是 c 的适当值。你的类应该是这样的:

public class MyClass implements IResp {
    private String myConstantC;
    public MyClass(String c) {
        this.myConstantC = c;
    }
    privateResponse onResp(String a, String b, String c) {
        // your code
    }
    @Override
    public Response onResp(String a, String b) {
        return onResp(a, b, myConstantC);
    }
}

如果您不能忍受单个常量 c 值,但有机会以某种方式为给定的 onResp(a, b)调用,你可以做类似的事情

public class MyClass implements IResp {
    privateResponse onResp(String a, String b, String c) {
        // your code
    }
    private String findTheCValue(String a, String b) {
        // your way to find and return the correct c value
    }
    @Override
    public Response onResp(String a, String b) {
        String c = findTheCValue(a, b);
        return onResp(a, b, c);
    }
}

关于java - 在方法中实现带有附加参数的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69387816/

相关文章:

java - 我们如何在不打开联系人应用程序本身的情况下将新联系人插入 Android 联系人中?

c++ - 使用类的链表

java - 使用标记接口(interface)限制泛型参数

java - 如何执行抽象类中的java方法?

c# - 将从接口(interface)类型获得的 MethodInfo 对象转换为 C# 中实现类型的相应 MethodInfo 对象?

java - 接口(interface)值始终为空

java - 将 PostgreSQL JSON 列映射到 Hibernate 实体属性

java - 使用继承构建通用树

Java:将 java.awt.Color 转换为 javafx.scene.paint.Color

objective-c - 我可以在运行时从文本文件创建 Objective-C 类吗?