【问题标题】:Is it possible to call a method in the same line you create an instance in java是否可以在您在 java 中创建实例的同一行中调用方法
【发布时间】:2015-03-30 17:42:38
【问题描述】:
class BooleanWrap{
    boolean b = new Boolean("true").booleanValue(); 
}

当我尝试对下面的代码做同样的事情时,它不起作用:

class TestCode  {
    public static void main(String[] ar)  {
        TestCode tc = new TestCode().go();
    }

    void go() {
        //some code
    }
}

编译错误:

TestBox.java:6: 错误:不兼容的类型 TestBox t = new TestBox().go();

当我将方法go() 的返回类型从void 更改为类类型时,我不再收到错误消息。

class TestCode2 {
    public static void main(String[] ar) {
        TestCode2 tc2 = new TestCode2().go();
    }

    TestCode2 go() {
        //some code
    }
}

我刚刚在上面的代码中创建的对象(由tc2 引用)会发生什么?会被遗弃吗?

【问题讨论】:

    标签: java methods constructor dot-operator


    【解决方案1】:

    TestCode tc = new TestCode().go() 仅在go() 方法返回TestCode 时才有效,因为您将它分配给TestCode 类型的变量。

    TestCode2 tc2 = new TestCode2().go(); 的情况下,如果go() 方法返回对TestCode2 不同实例的引用(即不是您为其调用go() 的那个实例),则不会引用原始实例任何地方,并且有资格进行垃圾收集。换句话说,tc2 将引用由go() 返回的实例,它不必与在 new TestCode2() 的 main 方法中创建的实例相同。

    【讨论】:

    • @JBNizet 这就是我的意思。编辑答案更准确。
    • 是的,那物体呢?因为它被引用的唯一引用变量,现在引用了其他对象。
    • @user1851607 变量 tc2 从未引用 new TestCode2() 创建的实例。它只引用go()返回的实例。
    【解决方案2】:

    这应该可以正常工作:

    class TestCode{
        public static void main(String[] ar){
            new TestCode().go();
        }
    
        void go() {
            System.out.println("Hello World");
        }
     }
    

    编辑:附加信息

    这样你不能保存创建的实例。它将在下一次垃圾回收中立即销毁。因此,通常情况下,如果不需要实例本身,则会使用静态方法来避免这种不必要的创建和销毁。

    class TestCode{
        public static void main(String[] ar){
            TestCode.go();
        }
    
        static void go() {
            System.out.println("Hello World");
        }
     }
    

    【讨论】:

    • 不,不会。您不能将 void 方法链接到构造函数调用。
    • 对不起,我的错。我对下面的答案感到困惑。你没有试图返回任何东西。我没看到。
    • 这无法解释问题所在。
    【解决方案3】:

    正如 Eran 所说,go() 方法不返回任何内容,并且您试图将任何内容都分配给变量,您的方法需要返回一些东西,在这种情况下是一个 TestCode 对象

    【讨论】:

      猜你喜欢
      • 2010-11-29
      • 1970-01-01
      • 2020-11-04
      • 2021-03-26
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      • 1970-01-01
      • 2016-04-10
      相关资源
      最近更新 更多