Почему Java поддерживает метод, который имеет имя класса и тип void

Java позволяет создать метод, который имеет имя класса и тип void (например, void constructor). Конструктор не имеет типа и выполняет функцию конструктора. Но есть ли использование вышеупомянутых методов. Можете ли вы привести примеры этих обычаев

Пример кода:

//my class
class MyClass{

    //constructor
    public MyClass(.....){
    }

    //What is the use of the below method
    public void MyClass(....){
    }
}

Ответ 1

Чтобы ответить на ваш вопрос: Нет, это не имеет особого значения. На самом деле, это противоречит интуиции и запутанности. Некоторые компиляторы даже генерируют предупреждение "Этот метод имеет имя конструктора".

Но поскольку технически возможно, что это не ошибка компиляции, я бы посоветовал остаться от нее. Существует несколько разных имен методов, которые могут быть более наглядными и служить одной и той же цели.

Ответ 2

Да, свежее Java может смутить это. Конструктор не может иметь тип возврата. Но некоторые люди неправильно понимают, что "тип возврата" и "пустота" - это то, что равно, но это не так. Конструктор - это другая история, и метод, который имеет имя класса и любой другой тип возвращаемого значения (void, String, int,.......), отличается. Но это более запутанно.

Ответ 3

Не существует разумного использования метода, имя которого совпадает с именем класса.

  • Это нарушение стиля. Согласно официальному руководству по стилю Java, имена методов Java должны начинаться с строчной буквы.

  • Это сбивает с толку, потому что он внешне выглядит как конструктор.

  • Это сбивает с толку, потому что, когда вы используете такой метод, похоже, что вы неправильно используете имя класса.

  • Возможно, это приведет к неожиданному поведению и/или неожиданным ошибкам компиляции из-за неоднозначности имени класса и имени метода.


Почему Java поддерживает метод, который имеет имя класса и тип void?

В основном потому, что язык Java не применяет правила стиля идентификатора. (ИМО, было бы лучше, если бы оно применяло правила... но решение было принято давно, и его нельзя изменить по соображениям совместимости.)

Ответ 4

Нет У него нет специального использования, он будет рассматриваться как похожий на другие методы внутри класса.

Стоит прочитать ниже статью:

http://docs.oracle.com/javase/tutorial/java/javaOO/methods.html

Если имя метода совпадает с именем класса и оно не имеет типа возврата, то оно называется constructor, которое имеет специальное использование в oops.

сохраняя такие имена как метод, он будет создавать только путаницу и читаемость кода.

ниже ссылка может помочь вам, почему вопросы читаемости: http://java.dzone.com/articles/why-code-readability-matters

Ответ 5

Использование идентично использованию любого другого метода. И тип возврата не должен быть void. Это часто может сбивать с толку, но вполне логично называть методы такими же, как имя класса. Это, как правило, вызывает больше путаницы, чем вы хотите, но это юридическое поведение. Методы не имеют специальных свойств, кроме любого другого метода класса.