考虑业务场景:
我们与student
方法有payFees()
接口。有些类实现了学生界面并实现了payFees
方法。它们是:SchoolStudent
,CollegeStudent
,UniversityStudent
,OnlineStudent
。
现在,开发人员会将学生列表创建为List<Student>
,并将不同的学生添加到列表中(SchoolStudent
,CollegeStudent
等)。
现在开发人员可以使用Student
接口创建匿名类,实现一些错误的payFees
方法并将该对象添加到学生列表中。
这个匿名学生无效,它会分散业务逻辑。
那么我们如何保护开发人员不要创建Student
接口的匿名类。
答案 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
和包访问构造函数。