如何强制类声明最终变量?

Cor*_*lla 3 android abstract-class final

目前,我创建了一个这样的抽象类:

public abstract class MyClass {
    public final static String TAG;
    ...
}
Run Code Online (Sandbox Code Playgroud)

但它给我一个错误,即不初始化最终变量.然后我尝试从构造函数初始化它,但它也没有工作(给出相同的错误加上另一个尝试将值设置为最终变量),尽管许多stackoverflow帖子说真的有用......

public abstract class MyClass {
    public final static String TAG;

    public MyClass(String u){
        this.TAG = u;
    }
}
Run Code Online (Sandbox Code Playgroud)

似乎只有在声明变量时才必须分配最终变量.它是否正确?我怎样才能做到这一点?

Bla*_*elt 5

你不能因为static关键字.static final确保变量的值不会在应用程序的整个生命周期中发生变化.当您尝试在构造函数中初始化它时,您将其值绑定到特定实例,从而击败常量的概念.由于您希望每个子类具有不同的值,因此您可以更改代码,例如:

public abstract class MyClass {
    protected final String mTag;

    public MyClass(String u){
        mTag = u;
    }
}
Run Code Online (Sandbox Code Playgroud)

这种方式mTag只能从MyClass子类访问 .或者你也可以constant在每个子类中声明它,省略构造函数的初始化.例如

public final static String TAG = YourClassName.class.getSimpleName(); 
Run Code Online (Sandbox Code Playgroud)