У меня есть класс Fraction, используя ключевое слово это в моем конструкторе:Java «это» ключевое слово правильное использование
public Fraction(int numerator, int denominator)
{
this.numerator = numerator;
this.denominator = denominator;
adjustSigns();
if(this.denominator == 0)
{
throw new FractionException(" Undefined Fraction ");
}
}
У меня также есть метод:
public FractionInterface multiply(FractionInterface secondFraction)
{
Fraction second = (Fraction) secondFraction;
Fraction answer = new Fraction ((numerator * second.numerator), (denominator * second.denominator));
answer.reduceToLowestTerms();
return answer;
}
Описанный выше метод отлично работает, когда я компилирую и запускать, но так вот эта версия:
public FractionInterface multiply(FractionInterface secondFraction)
{
Fraction second = (Fraction) secondFraction;
Fraction answer = new Fraction ((this.numerator * second.numerator), (this.denominator * second.denominator));
answer.reduceToLowestTerms();
return answer;
}
Мой вопрос в том, какой из них правильный? Если использовать ключевое слово this этого конструктора в моем конструкторе, я также должен использовать его в своих методах? Опять же, они оба отлично работают и делают то, что они должны делать, но я хочу знать, каким образом это правильный путь. Благодарю.
t он использует 'this' в конструкторе (или сеттерах), как правило, используется для устранения неоднозначности имен переменных –
В терминах' this', оба являются правильными. Большая проблема с реализациями «multiply» заключается в том, что они ** лежат **: они утверждают, что принимают что-либо, реализующее «FractionInterface», но на самом деле они принимают только экземпляры подклассов «Фракция» и «Фракция». Правильная реализация будет работать с 'FractionInterface' (или объявить аргумент типа' Fraction' вместо). –
Но на 'this': Есть две школы мысли об использовании' this' в тех случаях, когда это необязательно: школа, которая считает, что, поскольку это необязательно, это просто лишний текст/текст, и школа, которая считает, что это полезно для ясность. Если вы не используете 'this', легко думать, что' numerator' является аргументом функции или локальной переменной, а не полем экземпляра. –