public interface Names{
public List<String> getFirstNames();
public List<String> getNamesWithPrefix(String prefix);
public List<String> deleteName(String name);
....
....
}
例如,现在引入了一个名为 String source 的新变量,该变量需要在每种方法中传递。 想象一下变量源告诉我必须从哪个源获取名称。
是否存在定义源的通用方法,以便这些方法可以相应地工作?
选项1:向每个方法添加字符串源,然后在方法内部获取源详细信息,根据我的理解,这不是干净的代码。
答案 0 :(得分:0)
您可以使用...来拥有无限数量的相同类型的参数,并且在您的实现中,您可以根据传递的参数的索引来控制逻辑
public interface Names{
public List<String> getFirstNames(Strings ... inputs);
public List<String> getNamesWithPrefix(String ...inputs);
public List<String> deleteName(String ...inputs );
....
....
}
尽管我不推荐这种方法(具有发送参数的通用方法),因为如果您检查任何通用库,您将看到方法的使用(应该仅由您的接口公开)将与实现结合使用。使用不同参数进行重载,这使得实现的可读性和抽象性更高
答案 1 :(得分:0)
这似乎是dependency injection
的问题。我能想到的一种解决方案是,在实现类中,有一个参数化的构造函数,您可以在其中传递source
,然后可以在接口方法的具体实现中使用该source
对象。
现在,由于您只是将source
对象传递给构造函数,因此您可以按任何需要的方式对其进行定义,并且代码仍然可以正常工作。简而言之,您的方法将不再取决于定义source
对象的方式。
答案 2 :(得分:0)
不要更改方法签名,请使用inheritance
为您拥有的每个source
实现一个类。在这种情况下,您可以注入与您的源匹配的相应子类。使用您的姓名interface
,例如source
X和Y会导致:
public class XNames{
public List<String> getFirstNames(){...};
public List<String> getNamesWithPrefix(String prefix){...};
public List<String> deleteName(String name){...};
....
....
}
public class YNames{
public List<String> getFirstNames(){...};
public List<String> getNamesWithPrefix(String prefix){...};
public List<String> deleteName(String name){...};
....
....
}