【问题标题】:Java: Reflection against casting when you know superclassJava:当你知道超类时反对强制转换
【发布时间】:2012-07-11 17:48:42
【问题描述】:

我不知道如何定义我的疑问,所以如果问题已经被问过,请耐心等待。

假设我必须动态实例化一个对象。这个对象肯定是一个已知的不可变类A的子类的实例。我可以动态获取具体的实现类。

完全使用反射会更好,就好像我对目标类一无所知,还是最好/可能做类似的事情:

A obj = (Class.forName("com.package.Sub-A")) new A();

Sub-A extends A 在哪里?目的是避免反射开销时间......

【问题讨论】:

  • 此代码无法编译。这甚至没有意义。 new A() 的结果是一个 A,而不是 A 的类,或者它的任何子类的类。请完善您的问题。

标签: java reflection downcast


【解决方案1】:

通常这是通过

完成的
Class.forName("com.package.Sub-A").getConstructor(param types).newInstance(param values)

为了避免反射覆盖,您只需缓存构造函数对象。

【讨论】:

  • 谢谢,“缓存构造函数对象”是什么意思?
  • getConstructor(...) 提供给你类型的对象(惊喜!!!!)java.lang.reflect.Constructor - 这个对象可以用来创建这个类的多个实例。
猜你喜欢
  • 2022-06-10
  • 2017-06-03
  • 2014-04-03
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
  • 1970-01-01
  • 2014-03-10
  • 2012-09-25
相关资源
最近更新 更多