我希望你能帮助我解决这个问题.
我一直在寻找这个问题的答案,但我能找到的只是与泛型类型的使用或关于反射的一般说明.
假设我们有一个父类和一个扩展该父类的子类.所以,见下文:
Parent v = new Child();
Run Code Online (Sandbox Code Playgroud)
如果我v.getClass()让它返回Child.但是,如果我让它v.getClass().cast()从类型返回一个对象Parent.
谁知道为什么会这样?我还看了一下Java API文档,找不到原因......
谢谢你的任何想法.
mil*_*ose 19
对象的运行时类型与变量或表达式的编译时类型之间存在重要区别.表达式的编译时类型只能从其组件的编译时类型确定.作为这些表达式的值的对象的运行时类型可以从表达式的参数的运行时类型确定,只要它们与编译时类型兼容即可.
为了说明这一点,在您的特定代码示例中:
v具有编译时类型Parent,但分配给它的值的运行时类型将是Child.v.getClass()将具有编译时类型Class<? extends Parent>(表示Parent类型或其子类之一的类对象 ).它在运行时的值将Child.class是类型Class<Child>.v.getClass().cast(obj)将具有编译时类型Parent.它的运行时类型将是运行时类型obj,因为它的运行时值实际上obj就是它自己.(也就是说,如果obj是一个可分配给类型变量的类型Child,否则cast()会抛出一个ClassCastException)| 归档时间: |
|
| 查看次数: |
7263 次 |
| 最近记录: |