Это хорошая практика программирования для использования статических полей импорта? - PullRequest
5 голосов
/ 28 июня 2011

Я объявляю некоторые постоянные переменные в моем SQLiteOpenHelper классе:

public static final String USERNAME = "user_name";
public static final String PASSWORD = "password";

В Activity, где я создаю SQL-запросы, я импортирую следующие поля:

import com.mygame.ui.login.LoginInfoSQLiteOpenHelper.*;

Это хорошая практика?
Или традиционный способ обращения к константам лучше?

LoginInfoSQLiteOpen.USERNAME

Ответы [ 3 ]

9 голосов
/ 28 июня 2011

Если вы посмотрите на чей-то код и увидите поле типа

foo.do(baz, USERNAME); 

wut (!), Откуда взялась эта переменная?
search, grep, где она объявлена?

Использование в качестве ClassName.FIELD делает вещи намного яснее и чище.Вы избегаете путаницы, и иногда имеет смысл иметь правильное имя класса, обозначающее поле, а не поле, появившееся из ниоткуда.


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

4 голосов
/ 13 января 2017

Несколько лет назад на вечеринку ... но я чувствую, что стоит дать противоположную точку зрения.Существует причина, по которой Java был разработан для импорта статических полей, и причина в том, чтобы скрыть, как класс реализован для пользователей класса.Это важный принцип проектирования внешнего кода.Я согласен с c00kiemon5ter, но могут быть ситуации, в которых это стоит.

Подробнее об импорте статических полей можно найти здесь: https://docs.oracle.com/javase/1.5.0/docs/guide/language/static-import.html

2 голосов
/ 28 июня 2011

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

...