java – 如何在接口中重载方法?
发布时间:2020-05-25 01:51:19 所属栏目:Java 来源:互联网
导读:如果我有这个界面 public interface someInterface { // method 1 public String getValue(String arg1); // method 2 public String getValue(String arg1, String arg2);} 我希望能够将1或2个字符串传递给getValue方法,而不必在每个实现类中
|
如果我有这个界面 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");
有没有更好的方法呢? 解决方法接口用作该接口用户的契约:指定可用的方法(在所有实现中)以及如何调用它们.如果接口的两个实现需要不同的方法,那么该方法不应该是接口的一部分:public interface Lookup {
}
public class MapLookup implements Lookup {
public String getValue(String key) {
//...
}
}
public class GuavaLookup implements Lookup {
public String getValue(String row,String column) {
// ...
}
}
在您的程序中,您将知道您使用的实现,因此您只需调用正确的函数: public class Program {
private Lookup lookup = new MapLookup();
public void printLookup(String key) {
// I hardcoded lookup to be of type MapLookup,so I can cast:
System.out.println(((MapLookup)lookup).getValue(key));
}
}
替代方法 如果您的类程序更通用并使用依赖注入,您可能不知道您拥有哪种实现.然后,我会创建一个新的接口Key,它可以是任何一种键: public interface Lookup {
// ...
public String getValue(Key key);
}
public interface Key {
}
public MapKey implements Key {
private String key;
// ...
}
public GuavaKey implements Key {
private String row,column;
// ...
}
程序中的依赖注入可能来自某些工厂实现.由于您无法知道使用哪种类型的查找,因此需要一个getValue合同. public interface Factory {
public Lookup getLookup();
public Key getKey();
}
public class Program {
private Lookup lookup;
public Program(Factory factory) {
lookup = factory.getLookup();
}
public void printLookup(Factory factory) {
System.out.println((lookup.getValue(factory.getKey()));
}
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读
