我想将一个final变量初始化为一个函数

时间:2013-06-19 13:31:02

标签: java final

程序代码:

public class A{
   public static final String l;

   public void method(String strTestData){
     l = strTestData;
   }
}

strTestData将包含“public static final java.lang.String DELETE”之类的数据。 有可能吗?

4 个答案:

答案 0 :(得分:8)

这是不可能的。

如果声明static final字段,则必须在静态inializer中或声明点初始化它。您以后不能修改该值。例如:

public static final String l = "Foo";

public static final String l;

static {
  l = "Bar";
}

也许你应该删除final修饰符?

答案 1 :(得分:2)

  

我想将最终变量初始化为函数

,你不能这样做。这符合JLS8.3.12

  

如果是空白的final(§4.12.4)类变量,则是编译时错误   没有通过静态初始化器(第8.7节)明确赋值(第16.8节)   声明它的类。

     

必须明确指定空白的最终实例变量(第16.9节)   类的每个构造函数(第8.8节)的结尾   声明;否则会发生编译时错误。

因此,您的代码将如下所示:

public class A{
   public static final String l;
   static
    {
       l = "Static String initialized..";
    }
}

或者,您可以在声明时初始化最终变量,如下所示:

public static final String l = "Static String initialized..";

答案 2 :(得分:1)

如果变量被声明为final,则只能初始化一次。实际上,您需要完全初始化一次。这必须在声明成员变量时或在构造函数中发生。

尝试改变它也是不可能的。

答案 3 :(得分:1)

您无法从方法初始化final变量。这是必需的,因为编译器需要确保变量只初始化一次。

可以随时调用方法,因此编译器无法确保变量仅初始化一次。