Можно ли вызвать метод в той же строке, вы создаете экземпляр в 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