为什么在方法参数中使用Final

时间:2013-12-27 05:16:44

标签: java android

在编写android时,我遇到了以下内容

@Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        convertView = _inflater.inflate(R.layout.abstract_list_row_item, null);
        move.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {  
                    // if btn is clcked then data is changed an we need to refresh framents
                    MainAppDataController.getInstance().setIsDataChanged(true);
                    callWhiteListDB = new CallWhiteListDB(_context);
                    callWhiteListDB.openToWrite();
                    callWhiteListDB.insert(allContacts.get(position).name, allContacts.get(position).number);
                    callWhiteListDB.close();

                    callBlackListDB = new CallBlackListDB(_context);
                    callBlackListDB.openToWrite();
                    callBlackListDB.deleteSingleItem(allContacts.get(position).dbId);
                    callBlackListDB.close();
                    populateList(position);
                    notifyListView(view);
                }
            });
        return convertView;

在上面的例子中,getView()方法有像int position,View convertView,ViewGroup parent这样的参数。我只是在onclick()内开始使用位置变量时,Eclipse会抛出编译错误并询问make最终的位置。我为什么要把它作为最终版? AFAIK final用于常量。

6 个答案:

答案 0 :(得分:9)

方法参数中使用

final引用 不可更改传递给方法后。这是保护传递参数的专门方法。因此,接收方法将无法使用新对象或值重新初始化

答案 1 :(得分:5)

您在匿名内部类中使用position。因此,要求该职位是最终的。

匿名类无法访问其封闭范围内未声明为final或有效最终的局部变量。

最终修饰符表示此字段的值不能更改。

http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html

答案 2 :(得分:1)

我们对方法参数使用final关键字,以防止方法内的代码修改该参数的值。

答案 3 :(得分:0)

final使你的变量保持不变。

当你的onclick方法在这个函数结束后被调用,你的变量不再存在,所以当你使用一个最终变量时,它的常量值会在onclick里面传递。

答案 4 :(得分:0)

  • 可以使用关键字final声明java变量。那么 最终变量只能分配一次。

  • 声明为final且未初始化的变量称为a 空白的最终变量。空白的最终变量强制构造函数 初始化它。

  • 声明为final的Java类无法扩展。限制 继承!

  • 无法覆盖声明为final的方法。在方法私人是 等于最终,但在变量中则不是。

  • 最终参数 - 参数值后无法更改 初始化。做一个小的java练习来找出其含义 方法覆盖中的最终参数。

  • Java本地类只能引用局部变量和参数 被宣布为最终的。

  • 将java变量声明为静态final的明显优势是, 编译的java类可以提高性能。

有关详细信息,请参阅this

另见Use of final keyword in Java method performance?

答案 5 :(得分:0)

因为getViewlistView充气布局时调用了onClick ...当您按下view (move)时调用position ...当时onClick被触发,getView中的变量position已被销毁...通过最终确定{{1}}的值,以便以后使用