2012-07-07 34 views
2

我有一个布尔方法传递布尔方法执行到另一个类 - java的

public boolean addCar(CarReg carReg, Car car){ 
    return ?; 
} 

这种方法上面,就是要传递到另一个阶级在实际检查时

public class Car{ 
    Map<CarReg, Car> carMap = new HashMap<carReg, Car>(); 
    //if the check is successfull, the details are added to the collection 
    public boolean addCar(CarReg carReg, Car car){ 
     If (garage.getOwner().toString == "pete"){ 
      carMap.put(carReg, car); 
      return true; 
     } 
    } 
} 

我可以打电话它通过说car.addCar(carReg,car);其实,我已经尝试过,但它似乎并不奏效。除非错误在别的地方。

+0

你能更清楚一切应该在哪里吗?我怀疑答案是使用'this',但它很不明确。 – 2012-07-07 15:43:37

+0

你可以传递一个对象,你可以传递一个方法调用的结果,但是你不能传递一个方法。请在更高的层面解释你想达到的目标。 – 2012-07-07 15:48:17

+0

您应该使用'equals'方法,而不是'=='来比较字符串。 – casablanca 2012-07-07 15:54:10

回答

1

与函数式语言不同,在像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 { 
     // ... 
    } 
    } 
} 

还有其他几种方法(匿名类,单类,静态方法),但这些是最常见的,应让你开始。

相关问题