与函数式语言不同,在像Java这样的面向对象的语言中,不会传递函数,而是传递可以调用方法的对象。有几种方法可以让您的布尔方法对Car类可见。我打算拨打方法canAddCar
只是为了避免与Car#addCar
混淆。
最简单的是,如果你能在汽车类本身定义的方法:
public class Car {
public boolean canAddCar(CarReg carReg, Car car) {
// logic for checking if you can add the car
}
public boolean addCar(CarReg carReg, Car car) {
if (canAddCar(carReg, car)) {
// logic for adding the car goes here
return true;
} else {
// anything special if you can't add the car?
return false;
}
}
}
下一个最简单的是,如果你能在课堂上,你传递一个对象的定义方法,如CarReg
这是有道理的,如果carReg负责检查您是否可以添加汽车。基于命名,我会想象你可能希望carReg也负责将车为好,但我不会显示在这里:
public class CarReg {
public boolean canAddCar(Car car) {
// logic for testing if you can add the car, for example:
return (car.getOwner().toString().equals("pete"));
}
}
public class Car {
public boolean addCar(CarReg carReg, Car car) {
if (carReg.canAddCar(car)) {
// ...
} else {
// ...
}
}
}
接下来,您可以在另一个对象传递给你的可以对检查负责的班级。 这可能是addCar
方法的另一个对象,或Car
类的属性。我展示后者在这个例子中(因为前面的例子基本上是前者):
// might as well use an interface if you'll have multiple methods of checking
public interface CarChecker {
boolean canAddCar(CarReg carReg, Car car);
}
// specific implementation of the CarChecker interface
// you can instantiate this and pass it into the Car class via a setter
public class MyCarChecker implements CarChecker {
public boolean canAddCar(CarReg carReg, Car car) {
// checking logic goes here
}
}
public class Car {
private CarChecker carChecker;
// you'll have to implent getCarChecker and setCarChecker
// (or let your IDE generate the getters and setters)
// assuming you'll call setCarChecker somewhere (or have it wired up via IoC)
public boolean addCar(CarReg carReg, Car car) {
if (carChecker.canAddCar(carReg, car)) {
// ...
} else {
// ...
}
}
}
还有其他几种方法(匿名类,单类,静态方法),但这些是最常见的,应让你开始。
你能更清楚一切应该在哪里吗?我怀疑答案是使用'this',但它很不明确。 – 2012-07-07 15:43:37
你可以传递一个对象,你可以传递一个方法调用的结果,但是你不能传递一个方法。请在更高的层面解释你想达到的目标。 – 2012-07-07 15:48:17
您应该使用'equals'方法,而不是'=='来比较字符串。 – casablanca 2012-07-07 15:54:10