【发布时间】:2023-03-19 20:00:02
【问题描述】:
如果我有这个界面
public interface someInterface {
// method 1
public String getValue(String arg1);
// method 2
public String getValue(String arg1, String arg2);
}
我希望能够将 1 或 2 个字符串传递给 getValue 方法,而不必在每个实现类中都重写。
public class SomeClass1 impelments someInterface
{
@Override
public String getValue(String arg1);
}
public class SomeClass2 implements someInterface
{
@Override
public String getValue(String arg1, String arg2);
}
这行不通,因为 SomeClass1 需要实现方法 2,而 SomeClass2 需要实现方法 1。
我坚持这样做了吗?
public interface someInterface2 {
public String getValue(String... args);
}
public class SomeClass3 implements someInterface2
{
@Override
public String getValue(String... args) {
if (args.length != 1) {
throw IllegalArgumentException();
}
// code
}
}
public class SomeClass4 implements someInterface2
{
@Override
public String getValue(String... args) {
if (args.length != 2) {
throw IllegalArgumentException();
}
// code
}
}
someInterface2 someClass3 = new SomeClass3();
someInterface2 someClass4 = new SomeClass4();
String test1 = someClass3.getValue("String 1");
String test2 = someClass4.getValue("String 1, "String 2");
有更好的方法吗?
【问题讨论】:
-
你应该使用2个接口。
-
让你的课程
abstract。否则,您的类必须实现接口的两种方法。由于示例的简单性,将其分成两个界面将没有任何帮助。 -
如果你传入一个字符串并且类只实现了双参数方法,你会发生什么,反之亦然?
-
你到底想做什么?您描述的情况有代码设计问题的味道。
-
您的两个类的行为应该不同,因此它们不应实现相同的接口(即使它们的方法名称可能相同,但它们的约定却不同)。正如 Sotirios 建议的那样,使用两个接口。