Как понять "(редактируемый) super.getText ();" - PullRequest
1 голос
/ 12 февраля 2012

Редактируемый - это интерфейс, следующий код - это метод класса EditText, который показан в исходном коде Android:

public Editable getText() {
    return (Editable) super.getText();
}

Я хочу, чтобы было понятно, как понимать код(Editable)super.getText(), у меня есть два способа понять строку кода:

1.cast super класс EditText (суперкласс EditText - TextView) в Editable, затем вызовите getText() метод с Editable,

2. вызовите метод getText() с суперклассом (TextView), затем приведите возвращаемый класс к Editable

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

Ответы [ 3 ]

2 голосов
/ 12 февраля 2012

TextView не имеет ничего общего с Editable, как он может успешно выполнять приведение?

Тип возврата TextView.getText() равен CharSequence, а Editable является подклассомCharSequence.

Следовательно ...

return (Editable) super.getText();

... просто приводит CharSequence (возвращенный вызовом к super.getText()) к Editable.

0 голосов
/ 12 февраля 2012

Вызывает getText () суперкласса и переводит его в Editable

0 голосов
/ 12 февраля 2012

Приводит результат от super.getText() к Editable.

. Что вас смущает, так это то, что хотя круглые скобки используются как для группирования, так и для приведения типов, в этом случае он используется как приведение типовоператор, который имеет более низкий приоритет (как я полагаю, равен оператору new).

(я не смог найти соответствующую таблицу на официальном сайте, но вот тот, который кажется правильным: http://introcs.cs.princeton.edu/java/11precedence/)

...