К статическому методу в Java можно получить доступ с помощью экземпляра объекта [duplicate]

Средства управления Telerik действительно кажутся небольшим bloaty, но я сомневаюсь, что Вы были бы в состоянии достигнуть чего-то подобного в JQuery без большого количества усилий.

Это действительно зависит от того, сколько чрезмерного увеличения размера можно терпеть. Если это для приложения Интранет, то это действительно не имеет значения, но когда Вы определили внешнее направление, то это могло бы быть проблемой, это действительно зависит в среднем скорость соединения Ваших пользователей и на скорости их компьютера/браузера, который в конечном счете выполнит средства управления.

другой важный вопрос: Вы хотите стандартизировать свое веб-приложение в собственном комплекте инструментальных средств, который используется намного меньше, чем JQuery? Я сомневаюсь, что JQuery обанкротится где угодно скоро.

26
задан Rengasami Ramanujam 12 February 2011 в 12:15
поделиться

3 ответа

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

19
ответ дан 28 November 2019 в 07:51
поделиться

Это разрешено спецификацией, но не рекомендуется. Более того, IDE, например Eclipse, отмечают доступ к статическому методу на экземпляре объекта предупреждением.

3
ответ дан 28 November 2019 в 07:51
поделиться

Еще одна приятная (хотя и несколько хакерская) особенность, которую она дает вам, - это возможность по существу передавать ссылки на классы в форме объектов. Например, скажем, что у вас есть следующее:

public abstract class Animal {
    public String name() { return "animal"; }
}

public class Dog extends Animal {
    public String name() { return "dog"; }
}

Если вы затем выполните следующее:

Animal a = new Dog();
System.out.println(a.name());

... вы получите:

dog

На практике это означает, что вызов статических методов через созданные объекты предоставляет Java форму первоклассных функций. Вы определяете функцию «тип», используя абстрактный базовый класс, а затем создаете экземпляр любой функции правильного типа, переопределяя статический метод в дочернем классе. Затем вы используете объекты, как если бы они были просто контейнерами для рассматриваемого статического метода.

Чтобы сделать это более конкретным, представьте, что мы хотим иметь функцию, которая выполняет определенное кодирование строки в массиве строк, и мы хотим, чтобы она принимала в качестве аргумента функцию, которая выполняет кодирование для одной строки. Мы хотим, чтобы аргумент варьировался в зависимости от желаемой кодировки. Без первоклассных функций это невозможно сделать напрямую. Однако вызов статических методов для объектов дает нам обходной путь:

public abstract class EncodingType {
    public String encode(String s) { return s; }
}

public class Base64Encoding extends EncodingType {
    public String encode(String s) { base64Encode(s); } // Assume "base64Encode" is defined
}

public class Rot13Encoding extends EncodingType {
    public String encode(String s) { rot13Encode(s); } // Assume "rot13Encode" is defined
}

public class Encoder {
    public String[] encodeArray(String[] s, EncodingType enc) {
        for (int i = 0; i < s.length; i++) {
            s[i] = enc.encode(s[i]);
        }
        return s;
    }
}

Вы бы назвали это так:

Encoder e = new Encoder();
String[] strs = { ... };
strs = e.encodeArray(strs, new Rot13Encoding());
-2
ответ дан 28 November 2019 в 07:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: