Какой метод сначала просматривается компилятором, статическим или экземпляром метода при использовании ClassName.staticMethod ()? [Дубликат]

1

Я хочу получить правильное понимание, почему ниже ошибки компиляции? В соответствии с моим пониманием Если я использую 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()? но в этом вопросе большинство людей идут в неправильном направлении из-за ошибки в моем вопросе, поэтому я переместил этот вопрос на новый вопрос.

  • 0
    Это хороший процесс? зачем снова задавать тот же вопрос? удалите первый вопрос, если хотите переформулировать и начать заново.
  • 0
    Вы уже получили правильный ответ, когда спрашивали ранее. Нет смысла снова задавать тот же вопрос в надежде на что-то другое.
Показать ещё 2 комментария
Теги:
static
compiler-errors

1 ответ

2

Вы ошибаетесь в своем предположении: компилятор сначала ищет наиболее конкретные методы кандидата с сигнатурой (имя метода + параметры), без бокса. Это означает, что выбранный метод является нестационарным.

Затем на втором этапе компилятор увидит, что вы вызываете метод как static с синтаксисом <Class>.<method>().

Это почему вы получаете сообщение об ошибке.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню