在我的Android
应用程序中,当用户单击Sales
按钮时,它将显示另一个视图来执行销售。
如果所选客户的 GST 许可证到期日期少于 7 天并且即将到期,我的应用程序在实施警报对话框以向用户显示警告消息之前运行没有任何问题。现在,如果我不声明final
这两个变量,我会收到以下错误消息,customer
并且v
.
不能引用
customer
在不同方法中定义的内部类中的非最终变量不能引用
v
在不同方法中定义的内部类中的非最终变量
我明白那个
声明为 final 的引用一旦被初始化就不能被修改。
那么,如果我将这两个变量分配为 会发生什么final
?它总是包含相同的值?有人可以向我解释为什么编译器会给我这些错误以及为什么我应该声明final
这两个变量吗?
这是我的源代码:
private OnClickListener salesBtnClick = new OnClickListener() {
@Override
public void onClick(View v) {
Customer customer = salesCustAdpt.getSelectedCustomer();
if (customer != null) {
Date expiryDate = customer.getGSTLicenseExpiryDate();
if (checkCustomerGSTLicenseExpiryDate(expiryDate)) {
AlertDialog.Builder builder = new AlertDialog.Builder(SalesCustomerActivity.this);
builder.setCancelable(false)
.setPositiveButton(
"OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
try {
//Perform sales here!
Intent intent = null;
intent = new Intent(v.getContext(), SalesActivity.class);//Error msg here!
Bundle bundle = new Bundle();
bundle.putSerializable("selCustomer", customer);//Error msg here!
intent.putExtra("bundle", bundle);
startActivity(intent);
finish();
} catch (Exception ex) {
AddPlusUtil.displayErrorMsg(
SalesCustomerActivity.this,
ex);
}
}
});
AlertDialog alert = builder.create();
alert.setTitle("Warning Message");
String errMsg = "GST License Expiry Date of selected customer is \n" + expiryDate + " and going to expire soon.";
alert.setMessage(errMsg);
alert.setIcon(android.R.drawable.stat_notify_error);
alert.show();
} else {
//Perform Sales
}
}
}
}