我有一个方法,它使用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()的抽象方法,该方法将由每个继承的DateRangeDateDateRangeStringDateRangeInt类提供。然后,您甚至不必在迭代中遍历if树。

我希望这有帮助!

10-08 13:09