为什么我不能调用非静态变量?



Eclipse说我不能对非静态字段Art.instance进行静态引用。为什么它认为我从静态上下文调用Art.instantion?

TDrender本身被称为:

renderer = new TDRenderer();

TDender.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);
            }
        }
    }
}

这并不是说您处于静态上下文中;instance不是Art的静态字段,但将其引用为Art.instance意味着您试图将其用作静态字段。

您正在调用Art类的instance属性

如果它不是静态的(即类变量),那么就没有值,因为它期望在从Art类实例化的对象内部被引用。

如果要从导入Art的任何位置获得单个值引用,请将static前缀放在instance声明之前,并在Art文件中为其提供值。如果您希望从特定的Art对象访问instance变量,则需要创建一个并引用所创建对象的instance属性。

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

假设1-Art.instance是一个static实例。

如果是这样,您应该将TDRenderer的局部变量art声明为public static Art art;

好吧,那它是多余的和无用的。你为什么不直接引用Art.instance?

最新更新