我有一个类,其中一些变量用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乘以的参数是SPEED
和RADIUS
答案 0 :(得分:3)
scale_factor
也必须是static
且final
且必须出现在源文件中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类中调用它们。