gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:27:27 32 4
gpt4 key购买 nike

我有一个实现接口(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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com