我有一个超类 Registration,它拥有另外两个子类,Student 和 Professional。在另一个班级中,我有一个管理注册的列表。
我必须预见这种方法:
public ArrayList<Registrations> getRegistrationsByTypes(int x)
如果 x 为 0,该方法必须返回所有学生,而如果 x 为 1,它必须返回所有专业人士。你能告诉我它是怎么做的吗?
答案 0 :(得分:0)
您可以使用流来过滤这些值,如下所示:
public List<Registrations> getRegistrationsByTypes(int x) {
if (x == 0) {
return registrations.stream()
.filter(r -> r instanceof Student)
.collect(Collectors.toList());
} else if (x == 1) {
return registrations.stream()
.filter(r -> r instanceof Professional)
.collect(Collectors.toList());
}
return Collections.emptyList(); //default if x not valid
}
答案 1 :(得分:0)
可以创建另一个类,该类在构造函数中采用 registrationList 并具有根据输入类型过滤注册的方法。通过这种方式,您可以将过滤功能放在具有注册列表的类之外(SOLID 中的 S 原则)
public class FilteredRegistrationByType {
List<Registration> regList = new ArrayList<Registration>();
public FilteredRegistrationByType(List<Registrations> regList)
{
this.regList = regList;
}
public List<Registrations> getRegistrationsByTypes(int x) {
if (x == 0) {
return this.regList.stream()
.filter(r -> r instanceof Student)
.collect(Collectors.toList());
} else if (x == 1) {
return this.regList.stream()
.filter(r -> r instanceof Professional)
.collect(Collectors.toList());
}
return Collections.emptyList(); //default if x not valid
}
}
答案 2 :(得分:0)
您有两个选择。一个在超类中实现 getRegistrationsByTypes,两个在 Student 和 Professional 类中实现。
选项一:
// Add this one to super calass and, Implement it in the sub classes
public abstract ArrayList<Registrations> getRegisteration();
public ArrayList<Registrations> getRegistrationsByTypes(int x){
if (this instanceof Student && x == 0){
return getRegisteration(); // It will returns all students
} else if (this instanceof Professional && x == 1){
return getRegisteration(); // It will returns all professionals
}
return null; // If it isn't student/professional or x > 1, x <0
}
选项二:
// Declare the following method in super class
public abstract ArrayList<Registrations> getRegisteration(in x);
// implement it in subclasses
class Student{
...
public ArrayList<Registrations> getRegistrationsByTypes(int x){
if (x == 0){
return registrationList;
}
}
class Professional{
...
public ArrayList<Registrations> getRegistrationsByTypes(int x){
if (x == 1){
return registrationList;
}
}
多态使选项二更好更简洁。