Частный метод, вызывающий соглашения - PullRequest
1 голос
/ 28 октября 2010

Я только недавно начал изучать Java. У меня есть вопрос, который больше о соглашениях, используемых в Java ...

Итак, предположим, у меня есть класс A:

public class A {
  public void methodA{
    methodB();
  }

  private void methodB{
  }
}

Иногда я вижу, как некоторые люди вызывают классы внутри класса, используя this (например, this .methodB ();), даже если нет двусмысленности. Это соглашение явно показывать людям, что они вызывают приватный метод, или это просто чей-то 'стиль' .

Ответы [ 3 ]

2 голосов
/ 28 октября 2010

Само по себе использование this мало что проясняет.Он может указывать на:

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

Что он предотвращает, так это:

  • статический импорт
  • локальные переменные
  • импорт классов (если у вас есть вложенный класс с тем же именем, что и импортируемый класс)

Подчеркну, что это вовсе не гарантирует, что вызываемый методявляется частным.

Впервые я слышу об этом правиле - я подозреваю, что, самое большее, это (не очень полезное) правило стиля компании.

1 голос
/ 28 октября 2010

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

 public class Outer {

       private SomeType member;

       private class Inner {
          public void innerMethod() {
              Outer.this.member.someFunction();
          }
       }
 }

Это может помочь в редких случаях, когда вы позже представляете проблему с затенением имен, не замечая этого, - внезапно вы вызываете неправильную функцию или обращаетесь к неправильной переменной.Тем не менее, квалификация с this является многословной, и это не общее правило.

0 голосов
/ 28 октября 2010

Немного не по теме, поскольку мы обращаемся не к закрытому методу, а к закрытой переменной класса, но стоит упомянуть, что иногда this необходимо для предотвращения двусмысленности:

public class Example {

  private RowMapper rowMapper;

  public void setRowMapper(RowMapper rowMapper) {
    this.rowMapper = rowMapper;
  }
}

В целом, когда нет двусмысленности, this является избыточным синтаксисом.

...