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
        }
    }
}
Другие вопросы по тегам