Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将初始值设置为静态字段_Java_Android_Static - Fatal编程技术网

Java 将初始值设置为静态字段

Java 将初始值设置为静态字段,java,android,static,Java,Android,Static,我有一个类,其中一些变量是用静态final初始化的。这些变量有一个定义的初始值,该值在同一个类和另一个类中使用 现在,我希望这个变量的值取决于一个比例因子: 由此: class Ball { public static final float SPEED = 4.0f; //... 为此: class Ball { public static final float SPEED = 4.0f * scale_factor; //... s假定比例系数是另一个浮

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

现在,我希望这个变量的值取决于一个比例因子:

由此:

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

class Ball {
    public static final float SPEED = 4.0f * scale_factor;
    //...
s假定
比例系数
是另一个浮点数,其值从1.0到3.0

问题是,如果我这样做,我会得到以下错误:

The field SPEED cannot be declared static in a non-static inner type, 
unless initialized with a constant expression
建议删除速度的静态修饰符。如果我这样做了,那么,我就不能在其他类中使用这个变量,因为它告诉我要使它成为静态的,以便能够使用它

更新--

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;
        }
        //...

我需要乘以比例因子的参数是
速度
半径
比例因子
也必须是
静态
最终
,并且必须出现在源文件中
速度
的定义之前。

比例因子
也必须是
静态
final
必须出现在源文件中
SPEED
的定义之前。

scale\u factor
也必须是
static
final
并且必须出现在源文件中
SPEED
的定义之前。

scale\u factor
也必须是
static
final
并且必须出现在源文件中
SPEED
的定义之前。

以下代码有效: 例如,a.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

以下代码起作用: 例如,a.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

以下代码起作用: 例如,a.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

以下代码起作用: 例如,a.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

我终于解决了:

只需将我需要的变量从Ball类传递到mainClass,并在那里给出我想要的值。然后我在主课堂上与他们一起学习,我可以在Ball课堂上给他们打电话。

最后我解决了:

只需将我需要的变量从Ball类传递到mainClass,并在那里给出我想要的值。然后我在主课堂上与他们一起学习,我可以在Ball课堂上给他们打电话。

最后我解决了:

只需将我需要的变量从Ball类传递到mainClass,并在那里给出我想要的值。然后我在主课堂上与他们一起学习,我可以在Ball课堂上给他们打电话。

最后我解决了:



只需将我需要的变量从Ball类传递到mainClass,并在那里给出我想要的值。然后我在主类中使用它们,我可以从Ball类调用它们。

只是一个更正:
一些变量是用静态final初始化的
这些不是变量。关键字
static
将它们转换为常量,不能再修改了。@Vyger好的,明白了。如果我需要更改值,但同时它要求它们是静态的,那么我如何更改值呢?只是一个更正:
一些变量是用static final初始化的
这些不是变量。关键字
static
将它们转换为常量,不能再修改了。@Vyger好的,明白了。如果我需要更改值,但同时它要求它们是静态的,那么我如何更改值呢?只是一个更正:
一些变量是用static final初始化的
这些不是变量。关键字
static
将它们转换为常量,不能再修改了。@Vyger好的,明白了。如果我需要更改值,但同时它要求它们是静态的,那么我如何更改值呢?只是一个更正:
一些变量是用static final初始化的
这些不是变量。关键字
static
将它们转换为常量,不能再修改了。@Vyger好的,明白了。如果我需要更改值,但同时它要求它们是静态的,那么我如何更改该值呢?我在另一个类中定义了
scale\u factor
,即
static float
。我不能把它定为最终值,因为它的值不是一个常数,它取决于屏幕的密度,我通过:
getResources().getDisplayMetrics().density
伙计们,你们对我最近的评论有什么回答吗?你们最好的办法是在另一个类中使用一个函数
getScaleFactor()
,然后根据需要乘以
SPEED
。@Bathsheba你们能举个例子吗?在你们的另一个类中:
public double getScaleFactor(){return 1.0;
。在
Ball
中,使用
OtherClass.getScaleFactor()*速度
;我在另一个类中将
scale\u factor
定义为
static float
。我不能把它定为最终值,因为它的值不是一个常数,它取决于屏幕的密度,我通过:
getResources().getDisplayMetrics().density
伙计们,你们对我最近的评论有什么回答吗?你们最好的办法是在另一个类中使用一个函数
getScaleFactor()
,然后根据需要乘以
SPEED
。@Bathsheba你们能举个例子吗?在你们的另一个类中:
public double getScaleFactor(){return 1.0;
。在
Ball
中,使用
OtherClass.getScaleFactor()*速度
;我在另一个类中将
scale\u factor
定义为
static float
。我不能把它定为最终值,因为它的值不是一个常数,它取决于屏幕的密度,我通过:
getResources().getDisplayMetrics().density伙计们,我最近的评论有什么答案吗?你们最好在另一个类中有一个函数
getScaleFactor()
,该函数根据需要乘以
SPEED
。@Bathsheba能给你们举个例子吗