Почему я не могу вызвать нестатическую переменную? - PullRequest
0 голосов
/ 02 марта 2012

Eclipse говорит, что я не могу сделать статическую ссылку на нестатическое поле Art.instance. Почему кажется, что я вызываю Art.instance из статического контекста?

Сам TDRenderer вызывается так:

renderer = new TDRenderer();

TDRenderer.java:

package towerDefense;

import java.awt.Graphics;
import java.awt.Image;

public class TDRenderer {

    public Art art;

    public TDRenderer()
    {
        art = Art.instance;
    }

    public void render(Graphics g)
    {
        for(int i = 0; i < 32; i++)
        {
            for(int j = 0; j < 24; j++)
            {
                Image itd = (Image)(art.sprites[art.level1.tiles[i][j].type]);
                g.drawImage(itd, itd.getWidth(null), itd.getHeight(null), null);
            }
        }
    }
}

Ответы [ 3 ]

4 голосов
/ 02 марта 2012

Дело не в том, что вы находитесь в статическом контексте;это то, что instance не является статическим полем Art, но ссылка на него как Art.instance означает, что вы пытаетесь использовать его, как если бы оно было статическим.

0 голосов
/ 02 марта 2012
    public class TDRenderer {   
     public Art art;

        public TDRenderer()
        {
            art = Art.instance;
        }
//so on..

Предположение 1 - Art.instance является static экземпляром.

Если это так, вы должны объявить локальную переменную art из TDRenderer как public static Art art;

Ну, тогда это излишне и бесполезно. Почему бы вам не обратиться непосредственно к Art.instance там, где вам это нужно?

0 голосов
/ 02 марта 2012

Вы вызываете свойство instance класса Art .

Если он не статичен (то есть переменная класса), тогда значение отсутствует, так как ожидается, что на него будут ссылаться внутри объекта, созданного из класса Art.

Если вы хотите импортировать единственное значение, которое может ссылаться из любого места Art, поместите префикс static перед объявлением instance и укажите его значение в файле Art. Если вы ищете доступ к переменной instance из определенного объекта Art, вам нужно создать ее и сослаться на свойство instance созданного объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...