2013-05-22 2 views
1

Просто я хочу спросить, что лучше из следующих случаев:Использование Ссылка VS getReference несколько вызовов на тот же объект

import com.x.x.x.Document; 
. 
. 
Document doc=user.getDoc(); 
MyFile file=Converter.getFile(doc.getFile()); 
MyTheme theme=Converter.getTheme(doc.getTheme()); 

ИЛИ

MyFile file=Converter.getFile(user.getDoc().getFile()); 
MyTheme theme=Converter.getTheme(user.getDoc().getTheme()); 

Поскольку первый случай требует импорта Document второго Безразлично» t и в то же время второй требует множественных вызовов до getDoc(). В первую очередь это не так, что лучше Читаемость & Функциональность

ответ

3

Первый стиль, с местным doc, превосходит, в основном для его читаемости: читатели вашего кода не придется гадать (или читать документацию), если getDoc() возвращает тот же экземпляр, на несколько звонков, и убедитесь, что вы делаете вызовы точно в одном экземпляре.

Производительность может быть или не быть проблемой, в зависимости от реализации getDoc(). Первый стиль использования (с doc) будет, по крайней мере, таким же быстрым, как и второй.

1

Поскольку первый случай требует импорта документа второй не

Не уверен, что вы имеете в виду: в обоих примерах вам нужна ссылка на документ. Два примера идентичны функционально и по производительности (при условии, что getDoc - просто геттер).

Я бы, однако, использовать первый вариант по двум причинам:

  • Я нахожу его более читабельным, чем метода последовательных вызовов
  • если ваш пользователь null, вы получите NPE на линии Document doc = user.getDoc(); так будет быть очевидным (во втором примере, если вы получаете NPE на MyFile file = Converter.getFile(user.getDoc().getFile());, это может быть либо пользователь, либо документ, который является нулевым).
+0

На самом деле он не требует импорта, так как ** Документ ** уже импортирован в ** Пользователь ** класс – YouYou

+1

@YouYouYou Вы имели в виду фактическое выражение 'import'? Мне было бы все равно, что ... – assylias

Смежные вопросы