Java: ссылка на статический контекст, похожий на собственную ссылку на класс `this`, частое использование` this` в качестве стиля кодирования
Воспитанный на python, с тех пор, как я недавно начал Java, я последовательно использовал ссылку на класс. this
является ли это обязательным. Я считаю, что это помогает читабельности кода, так как люди, которые его читают, не должны сами выяснять, к какой области относится переменная. Я хотел бы работать аналогично со статической областью действия: перед всеми ссылками на статический контекст static
ключевое слово и так сделать код немного более понятным. Java, однако, не любит это. Я знаю, что технически мог бы просто использовать имя класса, но это выглядит довольно уродливо, особенно когда у класса длинное имя. Я мог бы также предшествовать именам статических методов и атрибутов со специальным префиксом, но я не хотел бы, чтобы меня считали параноиком. Ребята, вы считаете это хорошим стилем ООП? Или я должен просто полностью забыть о чем-либо, смотри выше, и позволить javac сделать все привязки области видимости?
5 ответов
Есть некоторые соглашения, которые ставят перед всеми префиксами использования полей (или даже методов) префикс this
, Существуют также соглашения для префиксов имен переменных или классов (печально известная венгерская нотация). Например, официальные рекомендации по стилю кода Android требуют добавления префикса имен полей частного члена к m-
(такие как private int mSize
) и приватная статика с s-
,
Лично я ненавижу оба эти соглашения, потому что они просто загромождают и без того достаточно подробный Java-код. Современные IDE предоставляют некоторые средства визуальной дифференциации. Например, в Eclipse локальные переменные отображаются стандартным черным шрифтом, а поля - синим. Статические методы или поля выделены курсивом.
Они также предоставляют отличные способы навигации по исходному коду. Ctrl + клик по имени переменной / метода / типа приводит вас прямо к ее объявлению. Есть наброски. Eclipse даже отображает всплывающую подсказку с информацией о такой вещи, только если навести на нее курсор мыши.
Да, кто-то может поставить аргумент, что вы иногда не читаете код в IDE, но в простом текстовом редакторе. Иногда я делаю это тоже для быстрого просмотра кода, но, честно говоря, всякий раз, когда я хочу заняться каким-то серьезным кодированием, отказ от использования IDE - это просто мазохизм.
Не пытайтесь это на работе:
public class Foo
{
private static class This extends Foo{}
static int x;
static void f(int x){}
void test()
{
This.f(This.x);
}
}
+1 за использование термина смотри выше! Но -1 за попытку применить Pythonic идиомы к Java:) Большинство Java-программистов ожидают увидеть this
Ключевое слово только там, где есть неопределенность, которая будет решена. Свободное применение, как вы предлагаете, может вызвать у других подозрительное подозрение. Для статики, я полагаю, вы можете использовать некоторые нотации в венгерском стиле, если это ваша сумка, но их также не так сложно обнаружить при просмотре кода (если это не ужасно монолитно или что-то в этом роде).
Большинство IDE могут очень быстро найти источник указанной переменной. Поэтому в настоящее время считается просто отвлекающим, чтобы добавить дополнительные подсказки относительно их объема и т. Д.
В заключение, пожалуйста, не используйте this
без необходимости, и, пожалуйста, оставьте все свои усилия, чтобы держать в руках программистов, которые идут за вами, кроме, конечно, выбора хороших имен, написания хорошего кода и добавления хороших комментариев.
Вы можете поместить все статические методы в статический внутренний класс с помощью простой схемы именования. Например:
public class Myclass {
public void instanceMethod() {
Static.doThing();
}
public static class Static {
public static void doThing() {
//blah
}
}
}