Java swing组件实例化

问题描述:

最近在开发swing应用程序时,有人告诉我使用(ComponentClassName) Beans.instantiate(MyClass.class.getClassLoader(), ComponentClassName.class.getName())来创建组件对象而不是使用“new”。我想知道正确的方法。Java swing组件实例化

+0

你为什么要那样做?没有意义。使用新的。 –

+0

@JB Nizet-感谢您的回答。顺便说一下,有人告诉我,上述方法的运行速度会更快,但我对此持怀疑态度。这就是我问这个问题的原因。 – DpkTheJavaCoder

+1

实际上它会变慢。代码使用反射来调用新的ComponentClassName()。反射调用比直接调用要慢,不是类型安全,时间更长,可读性更差,并且最终完成同样的事情。 –

如果要实例化的类型是动态选择的,则可以使用Beans.instantiate()。通常,新的关键字工作得很好,而且我总是在Swing应用程序中使用它。

我认为正确的做法将是使用新的关键字,毕竟,这是它的作用。你使用Beans的方式似乎有点被强制,因为你知道你想实例化的类的类型。其次,因为这是一个swing应用程序,所以很可能你正在使用默认的swing类(可能会扩展其中的一部分)。这种方法的另一个问题是你必须有一个没有参数的构造函数。 Class.forName()可用于与上述代码相同的内容,但如果您不想在运行时动态创建类,请使用new关键字。