如何使用Interface引用保护匿名类创建

时间:2015-12-29 06:50:10

标签: java interface core anonymous-class

考虑业务场景:

我们与student方法有payFees()接口。有些类实现了学生界面并实现了payFees方法。它们是:SchoolStudentCollegeStudentUniversityStudentOnlineStudent

现在,开发人员会将学生列表创建为List<Student>,并将不同的学生添加到列表中(SchoolStudentCollegeStudent等)。 现在开发人员可以使用Student接口创建匿名类,实现一些错误的payFees方法并将该对象添加到学生列表中。 这个匿名学生无效,它会分散业务逻辑。

那么我们如何保护开发人员不要创建Student接口的匿名类。

2 个答案:

答案 0 :(得分:3)

我能想到的一种方法是(假设Student接口的所有有效实现都在同一个包中)来定义一个包私有附加接口(让我们称之为ValidStudent)有效的实现除了实施Student之外,还要实施。该包私有接口不必包含任何方法。

然后,您可以使用一些代码来验证添加到Student的{​​{1}}实例 - 验证代码将检查这些实例是否也实现了List接口。 ValidStudent的任何自定义实现都不会通过该验证。

Student

验证的一个示例(验证可以由包package x; public interface Student { ... } package x; interface ValidStudent // package private { // nothing here } package x; public class SchoolStudent implements Student, ValidStudent { } 中与x个实例相关的任何类)完成:

Student

答案 1 :(得分:0)

您可以使用Student接口而不是类Student和包访问构造函数。