【问题标题】:Get an instance of static class with a private constructor through generic class通过泛型类获取具有私有构造函数的静态类实例
【发布时间】:2018-12-14 10:33:21
【问题描述】:

我有一个静态类的实例,有一个私有构造函数。 MyStaticClass 声明了一个调用私有构造函数的变量。

public class ImplementedClass implements TheInterface<Integer>
{
   public ImplementedClass INSTANCE = new ImplementedClass();


        private ImplementedClass(){}
        //overrides
}

我需要使用泛型从另一个类中获取此类的实例。

Class<? extends TheInterface> myStaticClass = (Class<? extends TheInterface>) Class.forName(bd.getBeanClassName());

如何获取此类的实例?

【问题讨论】:

  • 构造函数期望什么参数?提示使用setAccessible(true)
  • 发帖MyStaticClass
  • @PeterLawrey- 该类只有一个私有构造函数。私有构造函数不能通过 getDeclaredConstructors 或 getConstructors 访问。我无法创建该类的新实例。我需要以某种方式获取包含该类实例的 INSTANCE 变量。
  • 您的INSTANCE 字段应该是静态的。否则事情就没有意义了。
  • @meowth 不是 INSTANCE 应该是 static 吗?这只是问题的疏忽,还是故意的?

标签: java class object generics static


【解决方案1】:

我假设你想要一个单例实例。 所以将实例变量设为静态:

public static ImplementedClass INSTANCE = new ImplementedClass();

如果这样做,您可以:

    String classname="ImplementedClass";
    Class c=Class.forName(classname);
    Field instanceField=c.getDeclaredField("INSTANCE");
    TheInterface instance=(TheInterface)instanceField.get(null);

【讨论】:

  • 嘿..谢谢您的回复。但是传递一个 null 会产生一个空指针异常
  • 您是否将 INSTANCE 设为静态?如果我删除静态,我也会得到一个 NullPointerException。
  • 你是对的!!它现在正在工作。非常感谢!!
猜你喜欢
  • 2020-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-23
  • 2016-04-05
  • 1970-01-01
相关资源
最近更新 更多