2014-03-06 25 views
1

我有一个对象说有不同的方法获取不同汽车制造商的汽车例如奥迪,宝马,Merc等。所有这些车型都没有任何通用接口或抽象类,但是具有车轮,刹车等一些共同特性。汽车对象有一种方法来识别应使用哪种类型的制造商对象来提取属性。任何人都可以建议我从汽车物体中提取车轮的好方法吗?如何从java中的不同类别的对象获取公共属性

public class Car { 
    public Audi getAudi() { return this.audi; } 
    public BMW getBMW() { return this.bmw; } 
    public Merc getMerc() { return this.merc;) 

    public String getMaker() { return this.maker; } 
} 

public class Audi { 
    public Wheel getWheel() { return this.wheel; } 
    public Brakes getBrakes() { return this.brakes; } 
} 

public class BMW { 
    public Wheel getWheel() { return this.wheel; } 
    public Brakes getBrakes() { return this.brakes; } 
} 

public class Merc{ 
    public Wheel getWheel() { return this.wheel; } 
    public Brakes getBrakes() { return this.brakes; } 
} 
+2

请添加一些代码,因为它现在*一个选项*是使用反射,但我建议尽可能避免它。 – skiwi

+0

好吧,你可能想要检查(正式)无关的类。检查这个线程:http://stackoverflow.com/questions/22200676/recursively-list-all-properties-exposed-by-a-class/22201894#22201894 – robermann

+0

“所有这些汽车类没有任何通用的接口或抽象类在他们身上“为什么会有人想要建立一个系统的方式? –

回答

2

首先,如果所有的类具有相同的(逻辑)方法,它有一个接口,只是没有一个正式的一个,所以你的首要任务是执行所有类必须实现一个正式的接口。

或者,您可以使用反射来获取所有方法并解析那些名称,但是这种方法很麻烦,而且容易出错(如果方法签名过于复杂,那么可怕)。

或者,你可以让你的车类抽象的,有抽象方法GetWheel()GetBrakes()

而且,好像你应该使用工厂模式来保存你的getAudi()getBMW()getMerc()方法。这可以包含Car实例地图(如果您使用单个实例)或返回新实例(可以是匿名内部类而不是具体类),具体取决于您要实现的目标。

相关问题