Java,关于使用Object类的意见?

时间:2011-09-06 14:32:23

标签: java

我想知道使用Java的Object类的一般意见是什么:

private Car myCar;
private String myCarBrand;
public void set(String variableToSet, Object valueToSet){
    if(myCarBrand.equals("AUDI")){
        if(varibleToSet.equals("COLOR"))
            (Audi myCar).setColor((Color) valueToSet);
        ...
    }
    ...
}

不知怎的,我觉得我不应该使用Object类。但是我这样做的原因是并非所有汽车都具有相同的setter功能,现在我可以将它拆分为多个具有相同名称的setter,但使用不同类型的valueToSet,但是需要更多的代码,尤其是如果我valueToSet的类型大不相同。

由于

勘误表

  • Audi extends Car

  • setColor应该代表一个不适用于所有汽车的类,turnOnBackSeatDiscoLights之类的东西可能更适合。

6 个答案:

答案 0 :(得分:4)

我不同意您编写O-O编程的代码设计。

你应该将你的类设计为Car类,在car对象中,你应该有一个设置颜色的方法

public Car{
   //attributes of your car class
   private brandName;
   private color;
   ....
   ....
   ...constructor...

   public setColor(String color)
     this.color = color;
   public setbrandName(String brandName)
     this.brandName = brandName;    

}

从你的问题来看,我不知道你的班级实际指的是什么,但是,你的功能不应该只有一个名称“设置”,这是不合适的,很难猜出它意味着什么,做什么。记住在编写OO编程时,你应该记得做抽象。

具体到你的答案,我可以建议

利用基类(Car)的继承。您可以将您的Car类视为抽象类。 对于包含特定属性或方法的汽车的特定品牌名称,您应该对Car类进行子类化。

要记住的一点是,对于您声明的每个方法属性,它们必须对您的类具有一些“含义”。这是OO的重要概念,否则,您的代码将不会被其他人轻易维护,一个糟糕的例子就是您的设置功能。

答案 1 :(得分:3)

简短的回答,不要编写自己的代码来执行此操作 - 使用java bean。

你打算如何调用set()方法?它是由一些xml或属性文件驱动的吗?

考虑使用类java.beans.Introspector。

答案 2 :(得分:1)

至少有一些情况是在标准库中完成的(例如Container.add(Component comp, Object constraints)),所以这不是史无前例的。

答案 3 :(得分:1)

此代码的问题在于您正在失去类型安全性。请考虑以下代码:

Car car = new car();
car.setBrand("AUDI");
car.set("COLOR", "red"); //ka-boom

您可以使用继承来定义基础车,然后从中进行扩展。

public class Car {
//....
}

public class Audi extends car {
//....
}

答案 4 :(得分:1)

在我看来,这不是一个好主意。您正在抛弃Java编译时类型检查的所有优点。

如果颜色属性与所有汽车相关,则应该能够设置或获取它而不会转换为类似Audi的子类。如果您的对象具有不同的行为和不同类型的属性,则无论如何都需要更多代码来处理此问题,即使您有一个非常通用的set方法。

答案 5 :(得分:1)

  

然而我这样做的原因是并非所有汽车都具有相同的setter功能,现在我可以将它分成多个具有相同名称的setter,但是使用不同类型的valueToSet,但是需要更多的代码,特别是如果我的valueToSet有很多不同的类型。

处理具有不同属性/ getter / setter的不同类型事物(在本例中为Cars)的方法是定义类的层次结构。

这需要更多代码,但代码更简单,并且它是静态类型的,因此更可靠。