通过泛型在java中创建通用接口

时间:2018-06-10 10:40:53

标签: java generics

我正在使用以下界面,如下所示

public interface ZaestrorardRule {

    Map<String, List<MMTM>> exceute(String jobCode, String Plientlo) throws AaestroRardNetworkException;

}

然后有一个实现它的类,如下所示

public class AaestroRardBusinessRNFRuleImpl implements ZaestrorardRule {

    public Map<String, List<MMTM>> exceute(String jobCode, String Plientlo) throws AaestroRardNetworkException {

    }

}

现在让我说我正在开发除了上面显示的ZaestrorardRule之外的其他功能,它具有与ZaestrorardRule相同的功能,然后我必须创建一个单独的界面,如下所示

public interface WWaestrorardRule {

    Map<String, List<MMTM>> exceute(String jobCode, String Plientlo) throws AaestroRardNetworkException;

}

我的查询是我可以在界面中使用泛型,以便在界面结构固定时会有单个界面。

2 个答案:

答案 0 :(得分:0)

在Java中,我们可以扩展接口。您可以创建父接口:

public interface GenericRule {

    Map<String, List<MMTM>> exceute(String jobCode, String Plientlo) throws AaestroRardNetworkException;

}

像这样更改你的两个界面

public interface ZaestrorardRule extends GenericRule {

}

public interface WWaestrorardRule extends GenericRule {

}

答案 1 :(得分:0)

如问题评论中所述,您实际上并不需要创建通用接口,因为您的接口都具有相同的参数和返回类型。相反,你要做的是:

public interface Rule {

    Map<String, List<MMTM>> execute(String s1, String s2) throws YourException;

}

然后你有Rule实现

public class ZaestrorardRule implements Rule {
    // implement interface
}

public class WWaestrorardRule implements Rule {
    // implement interface
}

这是应该如何使用接口。

如果您需要不同的参数类型或返回类型,那么您将开始使用泛型。您的界面已经类似于java.util.function.BiFunction,除了它抛出一个自定义异常(很可能是一个已检查的异常)。只需执行BiFunction所做的事情:

public interface Rule<T, U, R> {
    R execute(T t, U u) throws YourException;
}

如果两个参数总是相同的类型,也可以通过将接口声明为Rule<T, R>而将方法声明为R execute(T t1, T t2) throws YourException来实现这一点。