Это возможно в Java:
package x;
public class X {
// How can this method be public??
public Y getY() {
return new Y();
}
}
class Y {}
Итак, по какой хорошей причине компилятор Java позволяет мне объявить метод getY ()
как общедоступный
? Что меня беспокоит: класс Y
является закрытым пакетом, но метод доступа getY ()
объявляет его в своей сигнатуре метода. Но вне пакета x
я могу присвоить результаты метода только Object
:
// OK
Object o = new X().getY();
// Not OK:
Y y = new X().getY();
OK. Теперь я могу как-то попытаться составить пример, где это можно было бы как-то объяснить с помощью ковариации результатов метода . Но что еще хуже, я также могу сделать это:
package x;
public class X {
public Y getY(Y result) {
return result;
}
}
class Y {}
Теперь я никогда не мог вызвать getY (Y result)
извне пакета x
. Почему я могу это сделать? Почему компилятор позволяет мне объявить метод таким образом, чтобы я не мог его вызвать?