我正在使用foreach循环遍历一个对象的数组列表,这些对象都是在同一个超类的不同子类中创建的,然后if语句使用instanceof布尔表达式来检查每个循环现在所在的特定项的子类属于,但我不认为我有使用正确的实例的布尔表达式,因为在调试我的代码时,所有if语句都被跳过。
for (Appointment item: AppointmentBook.apps){
if (item instanceof Onetime){
boolean checkOnce = ((Onetime) item).occursOn(month, day, year);
if (checkOnce == true){
appointmentsToday++;
appsToday.add(item);
}//check once true
else appointmentsToday = 0;
}//if onetime
约会是Onetime的超类。 约会预约约会数组列表所在的类。 happenOn是Onetime类中的一个方法
答案 0 :(得分:0)
你应该总是避免这样的代码:
if (item instanceof TypeA) {
...
} else
if (item instanceof TypeB) {
...
} else ...
使用多态或您会遇到高coupling。
答案 1 :(得分:0)
使用“ofstanceof”的布尔表达式是正确的。我怀疑用于填充AppointmentBook类中的应用程序静态字段的方法是问题的根源。如果调试显示每个if语句都被跳过,这是唯一的逻辑解释。我尝试重现一些类似于你的代码,以便测试它并且它工作正常。
这就是我做的事情
首先是预约课程:
public class Appointment {
}
第二个AppointmentBook类
import java.util.ArrayList;
import java.util.List;
public class AppointmentBook {
public static List<Appointment> apps = new ArrayList<Appointment>();
public AppointmentBook addAppointment(Appointment app) {
apps.add(app);
return this;
}
}
第三个扩展约会的OneTime类(因为你说约会是OneTime的超类)
public class OneTime extends Appointment {
public boolean occursOn(int month, int day, int year) {
if (day >= 15) {
return true;
} else {
return false;
}
}
}
正如您所看到的,我正在使用一个简单的测试用例来从happenOn方法返回布尔结果(仅用于测试目的)
然后我创建了以下测试类。我在AppointmentBook应用程序中填写了四个Appointment实例,其中两个是“ instanceof ”OneTime
public class AppointmentTest {
static int year = 2015;
static int month = 3;
static int day = 15;
public static void main(String[] args) {
AppointmentBook book = new AppointmentBook();
book.addAppointment(new Appointment())
.addAppointment(new OneTime())
.addAppointment(new Appointment())
.addAppointment(new OneTime());
for (Appointment item: AppointmentBook.apps) {
if (item instanceof OneTime) {
boolean checkOnce = ((OneTime)item).occursOn(month, day, year);
if (checkOnce == true) {
System.out.println("We have a checked OneTime instance...");
} else {
System.out.println("We have an unchecked OneTime instance...");
}
} else {
System.out.println("Not a OneTime instance...");
}
}
}
}
获得的结果显示在下图中:它证明您的instanceof表达式是正确的,并且问题很可能与填充apps字段的方法有关