我有一个方法,它使用List和另一个类对象作为其参数。我想基于要传递给方法的类对象遍历列表。该类具有三个不同的构造函数。其中一个使用Date对象,另一个使用字符串,第三个使用int。在我的方法中,我想根据所使用的类对象使用哪个构造函数来做不同的事情。有没有办法做到这一点?有没有一种方法可以执行if else语句来检查所使用的类对象的类型(基于构造函数)?
对于CodeWarrior:以下是构造函数示例:
public DateRange(Date date1, Date date2){
}
public DateRange(String string1, String string2){
}
public DateRange(int month, int year){
}
然后说我有一个这样的方法:
public static List<Schedule> getSchedule(List<Schedule> schedules, DateRange dateRange) {
List<Schedule> schedules = new ArrayList<Schedule>();
for (Schedule scheduleTime : schedules){
if
我想建立一种方法来设计if语句,以某种方式检查使用了哪种类型的DateRange,并根据此做不同的事情。
最佳答案
我认为这就是您想要的。
修改您的DateRange类,以便它可以告诉您如何创建它:
public class DateRange {
private final Object obj1;
private final Object obj2;
public DateRange(Date date1, Date date2) {
obj1 = date1;
obj2 = date2;
}
public DateRange(String string1, String string2) {
obj1 = string1;
obj2 = string2;
}
public DateRange(int month, int year) {
obj1 = Integer.valueOf(month);
obj2 = Integer.valueOf(year);
}
public boolean isDate() { return obj1 instanceof Date; }
public boolean isString() { return obj1 instanceof String; }
public boolean isInt() { return obj1 instanceof Integer; }
}
这是调用/检查语法:
public static List<Schedule> getSchedule(List<Schedule> schedules, DateRange dateRange) {
for (Schedule scheduleTime : schedules) {
if(dateRange.isDate()) {
// Do something based on the Date constructor.
} else if(dateRange.isString()) {
// Do something based on the String constructor.
} else if(dateRange.isInt()) {
// Do something based on the int constructor.
}
}
return schedules;
}
需要进一步修改
DateRange
类的另一种选择是使用继承基于构造函数类型构成DateRange
类族。基本的DateRange
类将具有类似于doSomething()
的抽象方法,该方法将由每个继承的DateRangeDate
,DateRangeString
和DateRangeInt
类提供。然后,您甚至不必在迭代中遍历if树。我希望这有帮助!