考虑以下Java
interface
public interface Script<T> {
public T execute(Map<String,Object> args);
}
然后我们有一个
public interface SubScript<T> extends Script<T> {
public T execute(String knownTypeArgument, Map<String,Object> args);
}
在Sub中,knownTypeArgument
方法始终需要execute
。在SubScript
界面中,不需要方法public T execute(Map<String,Object> args);
。
我的问题是,为了添加一个或两个参数来定义子接口是标准/正确的做法吗?
在实施中会导致代码错误如果SubScript
完全没有定义且knownTypeArgument
传递给Map<String,Object> args
?
PS:
execute(String knownTypeArgument, Map<String,Object> args);
和execute(Map<String,Object> args);
都应该用于完全相同的目的,只是在某些情况下execute
需要更多信息。
PPS: 根据stackoverflow规则,我正在寻找我缺少的事实/点,而不是讨论。
答案 0 :(得分:2)
即使你写了
在
SubScript
界面中,不需要方法public T execute(Map<String,Object> args);
。
这并不意味着execute(Map<String, Object) args)
会在SubScript
中消失。该界面将具有两种方法。它们可能具有相同的名称,但由于它们的签名不同,因此它们不会相互干扰。
SubScript
的每个实现都必须实现两种方法。当然,其中一种方法可以调用另一种,但这不是强制性的。
答案 1 :(得分:1)
在您的情况下,任何实现SubScript的类都需要实现
public T execute(Map<String,Object> args);
和
public T execute(String knownTypeArgument, Map<String,Object> args);
作为两个独立的重载方法,所以上面的方法并不适合您的需求。
也许创建一个类来执行你的方法设计要做的事情,使用不带参数的execute()方法,以及设置任何所需参数的setter方法。
答案 2 :(得分:-1)
接口应该用于定义给定行为所需的方法,因此通常以“able”后缀结束,如可拖动或可自定义。
对于仅创建辅助接口以添加新方法签名,建议使用方法重载。 Java允许多个方法共存同名但不同的参数集。您可以轻松地将两种方法都驻留在同一个类/接口中,并根据需要调用它们。