Java: 你能用一个变量来表达沮丧吗?

Java: Can you downcast with a variable?

如果我有一些派生的 classes,它们的方法与基础 class 不同,但彼此相似,我可以使用变量来向下转换吗?

例如:

    Object derivedClass = baseClass.getChild().getClass();
    ((derivedClass)differentClassObj.differentClassMethod()).derivedClassMethod();

也许这太模糊了 and/or 效率不高,因为我可以在基础 class 中创建空方法来绕过这个问题(或其他我没有学过的技巧),但我仍然好奇是否可以将变量传递给转换。

感谢您的见解!

编辑: 为了进一步澄清任何混淆,我正在尝试确定是否可以使用变量进行转换。所以说我想将一些东西转换为字符串(只是为了争论):

    String myObjStr = MyObject.class.getSimpleName();
    // Then I want to know if I can cast objects using that variable in the casting 
    //(so far it doesn't appear to be working but I know that's because its a string. 
    //Is there some way I can manipulate it so that I CAN cast with it?)
    ((myObjStr).differentClassObj.differentClassMethod()).derivedClassMethod();

虽然您可以使用 Class 对象来指定将对象转换为哪种类型,但它并不能真正帮助您:

Class<? extends ParentClass> derivedClass = baseClassObject.getChild().getClass();

// The following kind of does the cast you want, but not in a useful way:
derivedClass.cast(differentClassObject)

问题是你仍然需要静态地知道结果的类型。 cast 输出的静态类型仅与 Class 对象的 static 类型一样具体,而不是 class Class 对象实际表示。因此,即使你有一个代表 ChildClassOnederivedClass 对象,你也只知道它是一个 Class<? extends ParentClass>。虽然对象的 cast 方法会为 ChildClassTwo 的实例抛出异常,但您不能对 return 值调用 ChildClassOne 方法。

如果此 class 层次结构中 classes 的所有实例都具有您要查找的方法,但基础 class 无法提供有用的实现,您应该标记基 class 抽象并将此方法作为抽象方法赋予它。如果此 class 层次结构中的某些对象没有您正在寻找的方法,您可能应该重新设计您的程序或以常规方式执行强制转换。引入接口可能是个好主意。无论如何,使用 Class 对象进行转换可能对您没有帮助。