Я хочу получить правильное понимание, почему ниже ошибки компиляции? В соответствии с моим пониманием Если я использую Test.xyz(), тогда компилятор ищет только статический метод, а не метод instance, то почему под компиляцией не удается?
class Test {
public static void main(String arg[]) {
Test.xyz(10); // compilation fail
}
public void xyz(int i) {
}
public static void xyz(Integer i) {
}
}
Каждый, пожалуйста, предлагайте, почему компиляция терпит неудачу, а не другие предложения и как использовать, я знаю все основные вещи Autoboxing и т.д.
Этот вопрос уже задан мной. Какой метод рассматривается сначала с помощью метода компилятора, статического или экземпляра, когда используется ClassName.method()? но в этом вопросе большинство людей идут в неправильном направлении из-за ошибки в моем вопросе, поэтому я переместил этот вопрос на новый вопрос.
Вы ошибаетесь в своем предположении: компилятор сначала ищет наиболее конкретные методы кандидата с сигнатурой (имя метода + параметры), без бокса. Это означает, что выбранный метод является нестационарным.
Затем на втором этапе компилятор увидит, что вы вызываете метод как static
с синтаксисом <Class>.<method>()
.
Это почему вы получаете сообщение об ошибке.