Как аннотация @Override в Java может проверить орфографическую ошибку метода? - PullRequest
2 голосов
/ 07 марта 2019

Я просматривал информацию о @Override аннотации в Stackoverflow.

Я узнал, что она переопределяет родительский метод.Тем не менее, я видел некоторые комментарии, в которых говорилось, что @Override может на самом деле проверять орфографические ошибки, и весьма полезно поставить аннотацию @override перед всеми методами.

Я хочу знать, как @Override может проверять неправильную написание имени метода. (если я правильно понял)

Ответы [ 4 ]

5 голосов
/ 07 марта 2019

Давайте я хочу переопределить этот метод:

public class Foo {
    public void foo() { ... }
}

Без @Override я могу переопределить его:

public class Bar extends Foo {
    public void foo() { ... }
}

Но если я ошибся:

public class Bar extends Foo {
    public void fooo() { ... }
}

fooo не отменяет foo. Если бы я не осознал орфографическую ошибку, я бы не знал, что foo на самом деле не переопределено. Это может вызвать ошибки.

Если я добавлю @Override к fooo, однако:

public class Bar extends Foo {
    @Override
    public void fooo() { ... }
}

Компилятор скажет мне, что fooo ничего не отменяет. Я увижу это сообщение и укажу: «Но оно переопределяет foo! Почему компилятор сказал, что это не так? Ой, подождите! Я написал его неправильно».

3 голосов
/ 07 марта 2019

Ваше понимание неверно.

Во-первых: это @Override.Ява чувствительна к регистру, так что да, различие важно.Во-вторых:

Я узнал, что он переопределяет родительский метод.

Нет.Это просто отмечает тот факт, что метод, к которому он применяется, делает.То, что вы ударили @Overrides по методу, волшебным образом не заставляет его переопределять что-либо.Это вызовет исключения, если этого не произойдет.

Что касается проверки на орфографию: допустим, вы хотите переопределить метод toString().

@Override
public String toString() {
  return "myString";
}

будет успешным, потому что toStringсуществует так же в родительском классе (Object).

Однако при попытке:

@Override
public String toSttring() {
  return "one t too many";
}

он будет искать в родительских классах и реализованных интерфейсах.Если он нигде не может найти сигнатуру этого метода, он выдаст исключение.Видя, что это, скорее всего, должно было быть toString() вместо toSttring(), это одна проверка.

Однако, это не просто проверка правописания.Он в основном проверяет сигнатуру метода (которая включает имя метода).

Если вы попытаетесь:

@Override
public Double toString() {
  return new Double("5");
}

Если вы не добавили этот метод самостоятельно в родительский класс вашего класса, этопотерпит неудачу, так как Objects toString возвращает String.

Так же, как:

@Override
public String toString(String value) {
  return value;
}

, вероятно, потерпит неудачу по тем же причинам.

EDIT: просто для пояснения: @Override не проверяет орфографию.Если вы неправильно написали имя метода в родительском классе, оно не будет работать, если вы правильно произнесете его в дочернем классе и добавите аннотацию Override.

1 голос
/ 07 марта 2019

Ответ прост.

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

Он проверяет во время компиляции в иерархии (то есть родительском классе, родительском классе и т. Д.), Есть ли у текущего метода, который вы написали, метод с такой же сигнатурой.Если нет, то возникает ошибка.Это не проверка орфографии.Речь идет о совпадении сигнатуры, т. Е. Типе и порядке аргументов, а также имени метода.

0 голосов
/ 07 марта 2019

java @Override аннотация гарантирует, что любые изменения суперкласса в сигнатуре метода приведут к предупреждению, и вам нужно будет внести необходимые изменения, чтобы классы работали должным образом.

Лучше решать потенциальные проблемы во время компиляции, чем во время выполнения. Поэтому всегда используйте аннотацию java @Override, когда вы пытаетесь переопределить метод суперкласса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...