传递具有所有信息的对象与传递特定信息

时间:2014-06-08 18:22:00

标签: java methods parameters

我们将关注5个重要的课程:人员,汽车,住宅,工作和ISP。这是一个类的例子,这样我们就可以看到我想说的内容。语法有点偏。

public class Person() {
    private Car car;
    private House house;
    private Job job;
    private ISP isp;

    public Person(Car car, House house, Job job, ISP isp) {
    this.car = car;
    this.house = house;
    ...
    }

    public Car getCar() {
        ...
    }
}

public class Car() {
    private Make make;
    private Model model;
    private Color color;
    ...
}

public class House() {
    ...
}

我决定创建一个静态类;此类将仅包含将接受参数并执行某种操作的静态方法。这里有3个例子,我想知道哪种方式是最好的方法。我几乎想弄清楚什么时候应该传入具有所有必需信息的类,而不是只传递具体信息,并找出它们之间的优缺点。

public static boolean hasStableLife(Person person) { //This is a made up method and the logic may not make sense at all
    Car car = person.getCar();
    House house = house.getHouse();
    Job job = job.getJob();
    if(car.getValue() > 40000 && (house.getValue() > 300000 && house.hasNoLoans()) && job.isFullTime()) {
        return true;
    }
    return false;
}

public static boolean hasStableLife(Car car, House house, Job job) { //This is a made up method and the logic may not make sense at all
    if(car.getValue() > 40000 && (house.getValue() > 300000 && house.hasNoLoans()) && job.isFullTime()) {
        return true;
    }
    return false;
}

public static boolean hasStableLife(long carValue, long houseValue, boolean hasNoLoans, boolean isFullTime) { //This is a made up method and the logic may not make sense at all
    if(carValue > 40000 && (houseValue > 300000 && hasNoLoans) && isFullTime) {
        return true;
    }
    return false;
}

3 个答案:

答案 0 :(得分:0)

我建议在相关数据层次结构中使用最近的共同祖先。在hasStableLife的情况下,我们试图标记,因此我们应该能够访问该人生活的各个方面。如果我们想知道,比如hasNiceCar,那么我希望能够访问完整的Car对象。另一方面,如果我们想要评估特定属性,那么仅传递所需的数据点是有意义的,例如isPastRetirement(int age)

答案 1 :(得分:0)

三个注释:

1-总是喜欢较少的参数(零参数甚至更大)。这有助于您将来维护代码。

2- java中的方法将发送基元的副本(例如int,long,char,..等),但是在对象的情况下,它将发送引用的副本。考虑到注1和2,我认为最好使用第一种方法。

3-您当然可以重复使用您的代码。例如,第一种方法可以通过传递自己的数据来调用第二种方法,如下所示: P

public static boolean hasStableLife(Person person) {
    return this.hasStableLife(person.getCar(), person.getHouse(), person.getJob());
}

这可能非常有用,但这取决于您的要求。

答案 2 :(得分:0)

如果你只有在拥有一个人物对象(谁拥有汽车和房子)时才会调用此方法,那么你应该使用第一种方法,除非你应该使它成为人类的非静态方法。 / p>

如果您计划在没有人的情况下使用此功能(使用第一种方法无法实现),那么我可能会将名称更改为更准确地描述方法功能的内容,例如isSufficientForStableLife(...)

在第二个选项之间进行选择与之前的选择类似,您是否希望能够在没有汽车,房屋和工作对象的情况下调用该方法?

请记住,如果您需要的是最低级别的,偶尔不会拍摄物品,但又想检查一个人是否有稳定的生活,那么您不需要只使用其中一种方法你可以实现它们并从另一个中调用一个,例如:

public boolean hasStableLife() { 
   return isSufficientForStableLife(getCar(), getHouse(), getJob());
}

public static boolean isSufficientForStableLife(Car car, House house, Job job) {
    return isSufficientForStableLife(car.getValue(), house.getValue(), house.hasNoLoans(), job.isFullTime());
}
public static boolean isSufficientForStableLife(long carValue, long houseValue, boolean hasNoLoans, boolean isFullTime) { 
    return (carValue > 40000 && (houseValue > 300000 && hasNoLoans) && isFullTime);
}