Static member accessed via instance reference что это
Статический член доступен через ссылку на экземпляр (с помощью ключевого слова this)
В андроид студии я пытаюсь установить strokeWidth с помощью setStrokeWidth.
Но я получаю предупреждение статический член ‘com.example.ud.RoundCapGraph.strokeWidth’, доступ к которому осуществляется через ссылку на экземпляр
Вопрос: создает ли ключевое слово this новый экземпляр и получает доступ к переменной через новый экземпляр?
РЕДАКТИРОВАНИЕ: мне не нужно устанавливать статическую переменную strokeWidth, но я хочу понять, почему при использовании ключевого слова this генерируется конкретное предупреждение.
3 ответа
Ключевое слово this не создает новый экземпляр, но this. обычно используется для доступа к переменным экземпляра.
Лучший способ получить доступ к переменной static :
Когда вы получаете доступ к статическому члену, используя экземпляр объекта, экземпляр получает замену на Class. т.е. this.strokeWidth будет заменен на RoundCapGraph.strokeWidth
NullPointerException не будет из-за замены экземпляра.
Я нашел ссылку на это в Спецификация Java: Глава 15, Раздел 11: Выражения доступа к полю.
Пример 15.11.1-2. Переменная получателя не имеет значения для статического доступа к полю
Следующая программа демонстрирует, что нулевая ссылка может использоваться для доступа к переменной (статической) класса, не вызывая исключения
Правильно, статические члены принадлежат классу, а не экземпляру.
Static member accessed via instance reference что это
Бывалый
Профиль
Группа: Участник
Сообщений: 210
Регистрация: 10.7.2003
Где: Санкт-Петербург
Репутация: нет
Всего: 2
Все работает но строка
Код |
labelValueSale.setText(sPokupCenaProd.valueOf(fPokupCenaProd)); |
выделена и если навестись на нее написано
static member «java.lang.string.valueOf(float)» accessed via instance reference
что оно такое имеет ввиду? JDK1.5
вот кусок кода
Код |
public void buttonOk_actionPerformed(ActionEvent e) < float fPokupCenaProd=0; String sPokupCenaProd=»»; for (int i = 0; i |
Эксперт
Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US
Репутация: 49
Всего: 171
Код |
labelValueSale.setText(sPokupCenaProd.valueOf(fPokupCenaProd)); |
я нe понял, a что ты хочешь сделать в скобках?
Account removed
Профиль
Группа: Экс. модератор
Сообщений: 1611
Регистрация: 14.8.2002
Репутация: 8
Всего: 48
Бывалый
Профиль
Группа: Участник
Сообщений: 210
Регистрация: 10.7.2003
Где: Санкт-Петербург
Репутация: нет
Всего: 2
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.
[ Время генерации скрипта: 0.0983 ] [ Использовано запросов: 21 ] [ GZIP включён ] Best solution for static member being accessed by instance referenceI have this method in nearly all my classes. Accessing this static method in a helper class I am getting lint warning of «static member being accessed by instance reference». I don’t know how to not use «this» here. So I have two options. 1) Ignore the lint warning 2) Drop the «static» in my helper method. Which is better? Or propose a third solution. 4 Answers 4The warning is saying that you’re calling a static method showInfoDialog through an instance materialHelper instead of through the class MaterialHelper itself. This is «bad» because it suggests the method is actually an instance method that depends on some state in the instance. The solution is to replace everywhere in your code with Replace materialHelper with the class name where showInfoDialog() resides. From your description, materialHelper is an instance of this class. this method showInfoDialog(MainActivity.this, iv, title, text); is ‘static method’ It means: this method is shared for all instances of this class (static variable too). It really doesn’t matter where it was called. That’s why lint says: «oh gosh, why do you call this static method using this instance? It might change shared values in the other instances! Be careful!». Java will understand your code but this is a small mistake (your misunderstooding). That’s why the correct solution is to use this:
|