Java 更改本地变量android onClickListener

Java 更改本地变量android onClickListener,java,android,android-dialog,Java,Android,Android Dialog,我需要将此方法的返回值设置为在单选对话框中选择的项 但是,我无法设置retVal的值,因为它显然需要是final(因此无法更改) 有没有不使用全局变量的方法来实现这一点 private String getSaleType() { String retVal = ""; final String[] TYPES = {"Cash Sale", "Sales Order"}; AlertDialog.Builder choose = null; try {

我需要将此方法的返回值设置为在单选对话框中选择的项

但是,我无法设置retVal的值,因为它显然需要是final(因此无法更改)

有没有不使用全局变量的方法来实现这一点

private String getSaleType()
{
    String retVal = "";
    final String[] TYPES = {"Cash Sale", "Sales Order"};
    AlertDialog.Builder choose = null;

    try
    {
        choose = new AlertDialog.Builder(this);
        choose.setIcon(R.drawable.firstdroidicon);
        choose.setTitle("Sale Type");
        choose.setMessage("Type Of Sale?");
        choose.setSingleChoiceItems(TYPES, currentItem, new DialogInterface.OnClickListener()
        {
            @Override
            public void onClick(DialogInterface dialog, int which)
            {
                Log.i("Selected", TYPES[which]);
            }
        });
        choose.setPositiveButton("OK", new DialogInterface.OnClickListener()
        {
            @Override
            public void onClick(DialogInterface dialog, int which)
            {
                retVal = TYPES[which];
            }
        });

    }
    catch(Exception e)
    {
        messageBox("getSaleType", e.getMessage());
    }

    return retVal;
}
不可能

你可以在书中找到

在内部类中使用但未声明的任何局部变量、形式参数或异常参数都必须声明为final

在内部类中使用但未声明的任何局部变量必须在内部类主体之前明确赋值(§16)

不可能

你可以在书中找到

在内部类中使用但未声明的任何局部变量、形式参数或异常参数都必须声明为final

在内部类中使用但未声明的任何局部变量必须在内部类主体之前明确赋值(§16)


将变量声明为类member@Raghunandan我希望避免这样做…我不喜欢在类的顶部声明大量变量。你能解释一下为什么retVal必须是最终的吗?除了我的建议之外,我不知道还有什么其他的方法。bcoz您拥有一个内部类和一个方法。所以这应该是最后一次,不是用
String retVal1=“”;最终字符串retVal=“”然后在返回之前do
retVal1=retVal并返回
retVal1
。不管怎么说,
final
有什么问题?在这种情况下,您没有多次使用这个变量,然后返回它?@LouisEvans。下面是关于主题的解释将变量声明为类member@Raghunandan我希望避免这样做…我不喜欢在类的顶部声明大量变量。你能解释一下为什么retVal必须是最终的吗?除了我的建议之外,我不知道还有什么其他的方法。bcoz您拥有一个内部类和一个方法。所以这应该是最后一次,不是用
String retVal1=“”;最终字符串retVal=“”然后在返回之前do
retVal1=retVal并返回
retVal1
。不管怎么说,
final
有什么问题?在这种情况下,您没有多次使用这个变量,然后返回它?@LouisEvans。下面是关于这个话题的解释