我遇到了一个问题,其中instanceof工作,然后它没有.进入细节很困难,但我认为这可能是问题所在:
阅读本文:http://www.theserverside.com/news/thread.tss? thread_id = 40229(搜索Thread.currentThread),似乎暗示即使两个对象是同一个类,如果你传递它们在具有不同类加载器的线程之间,instanceof(和isAssignableFrom)可能仍会失败.
这当然可以解释我的行为,但我想知道是否有人可以验证它?
(我希望在讨论开始时链接的文章仍然可用,但它似乎不是.)
我们的商业模式需要识别不同类型的车辆.例如,摩托车,船,游艇,农场设备,雪地车,重型卡车,轻型卡车,乘用车和"其他".
我认为有两种方法可以处理它:创建一个带有几个子类的Vehicle类,比如船,卡车,汽车,并有一个枚举指示实际类型.这可以工作,允许您表示与公共子类共享一些共同特征的车辆.但是它允许你在类中使用不匹配的枚举.
我认为处理它的传统方法是为每种类型设置一个单独的子类,它可以是车辆的子类或车辆的子类.例如,重型和轻型卡车可能是卡车的子类; 船和游艇可能是船的子类; 雪地摩托车可能是车辆的子类.问题是,它并不能真正代表其他概念.
有没有人对这些场景有任何模式或最佳实践?
彼得
编辑: 目标的目的是传达有关车辆的信息,并能够以用户友好的方式显示该信息.例如,从数据库中提取数据并将其显示在要查看/编辑的屏幕上.
这导致了传统OO手段的另一个缺点,即偏离实际类型的类型指示器,因为它显示了需要执行某种实例的类型并将值转换为用户友好的类型.
(另外,澄清我说的是单个枚举,而不是每个子类的枚举.)
例如,是否可以执行以下操作:
public void doSomething(Class clazz) {
List<clazz> list = new ArrayList<clazz>();
list.add(clazz.newInstance));
}
Run Code Online (Sandbox Code Playgroud)
我知道这不起作用,但它显示了我想要达到的目的.有没有办法参数化泛型类的创建?
谢谢,彼得