使用函数返回类型分配最终变量

时间:2014-12-09 18:08:34

标签: java variables final

在java中,我尝试使用函数返回值赋值。但我得到了编译错误。任何人都可以帮我解决导致错误的原因吗?

代码是这样的:

public class A{
  private static final set<String> set1 = getSet();
  private Static Set<String> getSet(){
     Vector<String> vector1 = getVector();//some function which return the Vector of type String
     if(vector1!=null){
           set1=new HashSet<String>(vactor1);
     }
     else{
           set1= new HashSet<String>();
     }
  }
}

2 个答案:

答案 0 :(得分:3)

private static final set<String> set1 = getSet();

set1final,意味着无法更改。

然而,

set1=new HashSet<String>(vactor1);

set1= new HashSet<String>();

试图改变它。见JLS 4.12.4. final Variables

  

变量可以声明为finalfinal变量可能只是   分配给一次。声明变量final可以起到很大作用   文档,其价值不会改变,可以帮助避免   编程错误。

     

如果将final变量分配给除非,则为编译时错误   在作业之前,它肯定是未分配的(§16)。

我不知道这是否是拼写错误,但static应该全部为小写,而不是Static

答案 1 :(得分:0)

您的陈述

private static final Set<String> set1 = getSet();

表示:它调用方法getSet,它希望返回一个值,然后将返回的值分配给set1。 (请注意,它必须是Set,而不是set。)

为了实现这一点,getSet实际上必须使用return语句返回一个值。而不是

set1=new HashSet<String>(vactor1);

声明应为

return new HashSet<String>(vector1);  // make sure vector1 is spelled correctly

set1=中的其他getSet语句类似。