Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
考虑到性能、反射或构造函数引用,哪种实例化java类的方法更好?_Java_Reflection_Method Reference - Fatal编程技术网

考虑到性能、反射或构造函数引用,哪种实例化java类的方法更好?

考虑到性能、反射或构造函数引用,哪种实例化java类的方法更好?,java,reflection,method-reference,Java,Reflection,Method Reference,我最终遇到了这样一种情况:我可以使用反射来获取构造函数对象,然后使用该构造函数来实例化一个类,或者我可以使用构造函数引用来实例化它。我想知道哪一个性能更好。我知道使用反射访问方法的性能比直接访问低,但是如果我使用构造函数引用,那么它应该创建一个动态匿名类型来获取我想要的实例。哪一个是更好的反映或方法参考 interface ConstructorRef { public abstract Component getInstance(); } class Component1 imp

我最终遇到了这样一种情况:我可以使用反射来获取构造函数对象,然后使用该构造函数来实例化一个类,或者我可以使用构造函数引用来实例化它。我想知道哪一个性能更好。我知道使用反射访问方法的性能比直接访问低,但是如果我使用构造函数引用,那么它应该创建一个动态匿名类型来获取我想要的实例。哪一个是更好的反映或方法参考

interface ConstructorRef {
      public abstract Component getInstance();
}

class Component1 implements Component {
}

class Main {
      public static void main(String[] args) {
           ConstructorRef reference = Component1::new;
           Component component = reference.getInstance();

           Class<? extends Component> classObj = Component1.class;
           Constructor<? extends Component> constructorObj = classObj.getConstructor();
           Component component1 = constructorObj.getInstance();
      }
}
接口构造函数ref{
公共抽象组件getInstance();
}
类Component1实现组件{
}
班长{
公共静态void main(字符串[]args){
ConstructorRef reference=Component1::new;
Component=reference.getInstance();

类非反射(本机)way总是比reflective way性能更好。我知道,但正如我之前所说的,通过编码需求,我只能使用reflection或method reference。我将创建一些常量,将构造函数分组为一个块。在运行时,我应该能够根据常量I来决定我需要哪些对象因此,我不能使用直接对象实例化。构造函数引用是一种非反射的方式。因此在大多数情况下,它将比反射操作更快或更符合标准。此外,它还提供了关于类型和异常的额外安全性。“方法引用”,如<代码>组件1::新的< /代码>,它只是通往<代码>的快捷方式()。->新组件1()
因此,它只是用另一种方法包装的构造函数调用。我尝试使用反射和构造函数引用来测试实例创建的性能。但结果令人困惑。当我尝试使用一个线程,一个接一个地使用这两种方法实例化1000个对象时,反射的性能似乎更好。但是如果我多次重复实例创建(一个循环体将通过两个方法为每个方法创建1000个对象),现在我得到了不同的结果。构造函数引用方法只在第一次时滞后于第二次,似乎构造函数引用比反射快。(参见下一条注释)