0

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);
            }
        }
    }
}
4

3 回答 3

4

这并不是说您处于静态环境中;那instance不是 的静态字段Art,而是将其引用为Art.instance意味着您尝试将其用作静态字段。

于 2012-03-01T22:35:29.933 回答
0

您正在调用classinstance上的属性。Art

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

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

于 2012-03-01T22:36:47.473 回答
0
    public class TDRenderer {   
     public Art art;

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

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

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

那么它是多余的和无用的。为什么不在需要的地方直接引用 Art.instance 呢?

于 2012-03-01T22:40:52.587 回答