Можно ли вызвать метод в той же строке, вы создаете экземпляр в Java

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)? Будет ли это заброшено?

3 ответа

Это должно работать просто отлично:

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");
    }
 }

TestCode tc = new TestCode().go() будет работать только если go() метод возвращает TestCode, так как вы назначаете его переменной TestCode тип.

В случае TestCode2 tc2 = new TestCode2().go();если go() метод возвращает ссылку на другой экземпляр TestCode2 (т.е. не тот, на которого вы звонили go()), исходный экземпляр нигде не будет ссылаться и будет иметь право на сборку мусора. Другими словами, tc2 будет ссылаться на экземпляр, возвращенный go(), который не должен совпадать с экземпляром, созданным в методе main с new TestCode2(),

Как сказал Эран, метод go() ничего не возвращает, и вы пытаетесь указать, что переменной ничего не нужно, ваш метод должен что-то вернуть, в данном случае объект TestCode

Другие вопросы по тегам