我偶然发现我的同事在eventListner中使用的代码,即:
private void someActionPerformed(java.awt.event.ActionEvent evt) {
new className().methodName(); //public class and public void methodName()
} 我很确定:
private void someActionPerformed(java.awt.event.ActionEvent evt) {
className ref = new className(); //public class and public void
ref.methodName();
}是比他的更好的选项,因为以前的方法每次调用class时都实例化它。
我说错了吗?任何建议都很感激,如果我错了,请纠正我。
发布于 2015-07-24 09:52:37
两者都做相同的事情,但其中一个(第一个)是1行短。
当您需要遍历超过2-3个对象时,通常会推荐您的方法,因此通常不建议使用new Foo().getBar1().getBar2().doStuff(),因为它可以降级为意大利面代码,并妨碍代码的可理解性。
发布于 2015-07-24 09:58:39
第一个代码示例实例化一个新的className.methodName类型对象.为此,methodName必须是className类型的静态嵌套类。
注意:,这可能是一个错误。您的意思是新的className().methodName()
第二个示例创建className的一个新实例,并调用其方法methodName。
一些示例代码:
public class Test {
public static void main(String[] args) {
new Test.test(); // instantiates the inner class
Test t = new Test(); // instantiates Test
t.test(); // calls method #test of Test-instance
}
public String test() {
return "Test";
}
public static class test {
}
}为了判断什么是最好的解决方案,你的例子并没有给出更多的信息。该方法是一些静态实用程序代码,还是className的一个实例?这取决于..。
发布于 2015-07-24 09:54:44
每当一个对象被实例化但没有被分配一个引用变量时,它就被称为匿名对象实例化。
使用匿名对象,您还可以调用它的实例方法:
new className().methodName();在您的例子中,这是匿名对象,它没有引用变量。
在发言中:
className ref = new className();
ref.methodName();ref是保存className对象的引用变量,因此可以在ref变量上调用className的实例方法。
使用匿名表示法的好处是,如果您只想执行有限的操作(可能是调用单个方法等等)使用底层对象操作它是一种很好的方法。但是,如果需要对基础对象执行更多操作,则需要将该对象保存在引用变量中,以便可以使用该引用对该对象执行多个操作。
就性能而言,两者在方法范围内没有太大差别,一旦方法完成,这两个对象都是垃圾收集的有效候选对象。
https://stackoverflow.com/questions/31607335
复制相似问题