对于许多框架开发,我们需要通过从配置文件读取限定类名来实例化类。实例化一个没有默认构造函数的类
有不同的内省策略,专门的图书馆(如Objenesis)面向它。
但是,对于没有默认构造函数的类(重载),如果我们不知道重载构造函数的签名,我认为没有内省函数。非标准方法是使用sun.misc.Unsafe类来分配。这是我的理解。这是一个正确的理解?
然后有一个问题,因为超级类没有通过使用不安全实例化。但我认为不安全是最接近C代码的“新”操作符调用的,至少是其中的一部分。
所以问题是,我们是否有Java方法通过某种形式的内省来实例化一个对象,当我们唯一的信息是该类的限定名称(当然这存在于某个地方在类路径!)
您可以随时检查可用的构造函数并查看是否有任何值可以传递给它们。依赖注入框架将为自动装配构造函数注入的对象执行此操作 - 假设您正在创建的对象大多需要来自代码库的其他对象,而不是像字符串这样的“通用”参数;并且DI容器也管理这些依赖关系,从而知道如何创建它们。 – millimoose
你想获得初始化对象(调用构造函数)还是未初始化的对象(没有调用构造函数和初始化方法,字段有默认值(0或null)? –
我想让超类成员以相同的方式初始化。在堆上对象的“分配”和其成员的实例化(反过来可能需要分配)是不同策略的一部分?@millimoose你所说的对于DI框架是正确的,因为正如你所说“它是大多数是来自你的代码库的对象“。但是,我尝试了一个通用的”对象生成器“,用于一个需要外部适配器类并且不想限制为需要拥有一个默认构造器的项目定义 –