首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >新className().methodName();VS className ref =新className();

新className().methodName();VS className ref =新className();
EN

Stack Overflow用户
提问于 2015-07-24 09:47:09
回答 6查看 7.3K关注 0票数 7

我偶然发现我的同事在eventListner中使用的代码,即:

代码语言:javascript
复制
private void someActionPerformed(java.awt.event.ActionEvent evt) {                                         
    new className().methodName(); //public class and public void methodName()
}    

我很确定:

代码语言:javascript
复制
private void someActionPerformed(java.awt.event.ActionEvent evt) {                                         
    className ref = new className(); //public class and public void 
    ref.methodName();
}

是比他的更好的选项,因为以前的方法每次调用class时都实例化它。

我说错了吗?任何建议都很感激,如果我错了,请纠正我。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-07-24 09:52:37

两者都做相同的事情,但其中一个(第一个)是1行短。

当您需要遍历超过2-3个对象时,通常会推荐您的方法,因此通常不建议使用new Foo().getBar1().getBar2().doStuff(),因为它可以降级为意大利面代码,并妨碍代码的可理解性。

票数 6
EN

Stack Overflow用户

发布于 2015-07-24 09:58:39

第一个代码示例实例化一个新的className.methodName类型对象.为此,methodName必须是className类型的静态嵌套类。

注意:,这可能是一个错误。您的意思是新的className().methodName()

第二个示例创建className的一个新实例,并调用其方法methodName。

一些示例代码:

代码语言:javascript
复制
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的一个实例?这取决于..。

票数 4
EN

Stack Overflow用户

发布于 2015-07-24 09:54:44

每当一个对象被实例化但没有被分配一个引用变量时,它就被称为匿名对象实例化。

使用匿名对象,您还可以调用它的实例方法:

代码语言:javascript
复制
new className().methodName();

在您的例子中,这是匿名对象,它没有引用变量。

在发言中:

代码语言:javascript
复制
className ref = new className();
ref.methodName();

ref是保存className对象的引用变量,因此可以在ref变量上调用className的实例方法。

使用匿名表示法的好处是,如果您只想执行有限的操作(可能是调用单个方法等等)使用底层对象操作它是一种很好的方法。但是,如果需要对基础对象执行更多操作,则需要将该对象保存在引用变量中,以便可以使用该引用对该对象执行多个操作。

就性能而言,两者在方法范围内没有太大差别,一旦方法完成,这两个对象都是垃圾收集的有效候选对象。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31607335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档