将初始值设置为静态字段

时间:2014-04-09 10:39:46

标签: java android static

我有一个类,其中一些变量用static final初始化。这个变量有一个定义的初始值,在它的同一个类和另一个类中使用。

现在,我希望这些变量的值取决于scale_factor:

由此:

class Ball {
    public static final float SPEED = 4.0f;
    //...

对此:

class Ball {
    public static final float SPEED = 4.0f * scale_factor;
    //...

假设scale_factor是另一个值为1.0到3.0的浮点数。

问题是,如果我这样做,我会收到此错误:

The field SPEED cannot be declared static in a non-static inner type, 
unless initialized with a constant expression

建议删除SPEED的静态修饰符。如果我这样做,那么,我不能在其他类中使用这个变量,因为它告诉我让它静态以便能够使用它。

UPDATE -

public class SinglePlayerView extends View {
    //...
    public static float scale_factor;
    //...

    public SinglePlayerView(Context context) {
        super(context);
        scale_factor = setScreenScale();
    }

    public float setScreenScale() {
        float scale = getResources().getDisplayMetrics().density;
        return scale;
    }



    class Ball {
        public float x, y, xp, yp, vx, vy;
        public float speed = SPEED;

        public static final double BOUND = Math.PI / 9;
        public static final float SPEED = 4.0f;
        public static final int RADIUS = 4;
        public static final double SALT = 4 * Math.PI / 9;

        public Ball() {

        }

        public Ball(Ball other) {
            x = other.x;
            y = other.y;
            xp = other.xp;
            yp = other.yp;
            vx = other.vx;
            vy = other.vy;
            speed = other.speed;
            mAngle = other.mAngle;
        }
        //...

我需要将scale_factor乘以的参数是SPEEDRADIUS

3 个答案:

答案 0 :(得分:3)

scale_factor也必须是staticfinal必须出现在源文件中SPEED的定义之前。

答案 1 :(得分:0)

以下代码有效: 在ExampleA.java中定义

public static final float y = get();
public static final float SPEED = 4.0f * y ;
public static float get() {
        // TODO PROCESSiNG
        return 3;
}

在ExampleB.java中使用常量ExampleA.y和ExampleA.SPEED

HTH

答案 2 :(得分:0)

最后我解决了:

只需将我需要的变量从Ball类变为mainClass,然后给出我想要的值。然后我在主类中与他们一起工作,我可以从Ball类中调用它们。