我有一个抽象类Vehicle
,它有两个实现的子类RedVehicle
和YellowVehicle
。
在另一个类中,我有一个List<Vehicle>
,它包含两个子类的示例。我希望能够向一个方法传递一个类类型,然后使用该类型来决定我想在List
中对哪组对象做些什么。
由于Class
是泛型的,我应该用一些东西来参数化它,但是将参数作为父类Vehicle
会停止调用代码的工作,因为exampleMethod
现在需要的是Vehicle类型,而不是RedVehicle
或YellowVehicle
的子类。
我觉得应该有一个干净的方式来做到这一点,那么什么是正确的方式来实现功能?
注意:我不一定要传入Class
类型,如果有更好的建议,我很乐意尝试。
调用代码:
service.exampleMethod(RedVehicle.class);
service.exampleMethod(YellowVehicle.class);
字段/方法:
//List of vehicles
//Vehicle has 2 subclasses, RedVehicle and YellowVehicle
private List<Vehicle> vehicles;
//Having <Vehicle> as the Class parameter stops the calling code working
public void exampleMethod(Class<Vehicle> type)
{
for(Vehicle v : vehicles)
{
if(v.getClass().equals(type))
{
//do something
}
}
}
4条答案
按热度按时间svujldwt1#
请改为执行以下操作:
41zrol4v2#
你为什么不用visitor pattern?
这样你
if(v.getClass().equals(type))
)详细内容:
你的抽象类
Vehicle
得到一个方法accept(Visitor v)
,子类通过调用v
上的适当方法来实现它。使用访客:
zvms9eto3#
我想我会加上这个,只是为了让任何可能需要它的人更清楚。
在本例中,RevisedExposure是Exposure的一个子类,我需要调用GetMetadata(),其中包含这两个类中的任何一个,这将导致相同的结果集。
现在我可以用不同版本的列表从两个地方调用这个方法。
或
工作很棒!
7qhs6swi4#
我发现这个语法按预期工作: