匿名内部的变量和访问-class
Variable and access in anonymous inner-class
我有一些关于匿名内部的问题-class。我只是意识到在我的
anonymous inner-class 可以引用两个与 outter class 同名的变量,而在 ineer-class 中它自己,我怎么知道那一刻它指的是什么。
这是我的代码。
public class RealmUpdate {
private Realm realm;
public void upsertUserProfile( final String email, final String fname, final String lname,
final String gender, final String birthdate, final String tel){
realm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(@NonNull Realm realm){
try{
realm = Realm.getDefaultInstance();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String[] arr_date = birthdate.split("/");
String real_date = arr_date[2] + "-" + arr_date[1] + "-" + arr_date[0];
Log.d( getClass().getSimpleName(), real_date);
Date date = format.parse(real_date);
UserProfile data = realm.where(UserProfile.class)
.equalTo("Email", email)
.findFirst();
if( data == null){
Log.d(RealmUpdate.class.getSimpleName(), "No account in DB.");
UserProfile userProfile = realm.createObject(UserProfile.class, email);
Log.d( getClass().getSimpleName(), "Value add: Start!?");
userProfile.setFName(fname);
Log.d( getClass().getSimpleName(), "Value add: fName!?");
userProfile.setLName(lname);
Log.d( getClass().getSimpleName(), "Value add: lName!?");
userProfile.setGender(gender);
userProfile.setBirthdate(date);
userProfile.setTel(tel);
Log.d( getClass().getSimpleName(), "Value add!?");
realm.close();
return;
}
Log.d(RealmUpdate.class.getSimpleName(), "Found account in DB");
data.setEmail(email);
data.setFName(fname);
data.setLName(lname);
data.setGender(gender);
data.setBirthdate(date);
data.setTel(tel);
realm.close();
} catch(ParseException exception) {
realm.close();
exception.printStackTrace();
Log.e( getClass().getSimpleName(), "Catch Error!!!");
}
}
}, new Realm.Transaction.OnSuccess() {
@Override
public void onSuccess() {
Log.d( getClass().getSimpleName(), "Add profile success");
}
}, new Realm.Transaction.OnError() {
@Override
public void onError(Throwable error) {
realm.close();
Log.d( getClass().getSimpleName(), "Add profile not success");
}
});
realm.close();
}
根据我的代码,我有 2 个名为 "realm" 的 Realm 对象,第一个在 main class 中声明,其他一个在匿名 inner-class 中声明。当我尝试将 main class 的名称 Realm 对象更改为
private Realm realm_test;
它只显示
处的错误
realm.executeTransactionAsync(new Realm.Transaction() {
,anonymous inner-class中的代码还是可以的。但是当我像这样更改匿名内部 class 中的变量名称时,
public void execute(@NonNull Realm realm_test_inner){
匿名内部的代码-class也没有错误。
现在,我对这些很困惑,因为当我将数据插入数据库时它会导致错误(现在可以修复),但我仍然不确定它到底发生了什么?
此功能称为阴影。您可以在这里阅读:
https://docs.oracle.com/javase/tutorial/java/javaOO/nested.htm
我有一些关于匿名内部的问题-class。我只是意识到在我的 anonymous inner-class 可以引用两个与 outter class 同名的变量,而在 ineer-class 中它自己,我怎么知道那一刻它指的是什么。
这是我的代码。
public class RealmUpdate {
private Realm realm;
public void upsertUserProfile( final String email, final String fname, final String lname,
final String gender, final String birthdate, final String tel){
realm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(@NonNull Realm realm){
try{
realm = Realm.getDefaultInstance();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String[] arr_date = birthdate.split("/");
String real_date = arr_date[2] + "-" + arr_date[1] + "-" + arr_date[0];
Log.d( getClass().getSimpleName(), real_date);
Date date = format.parse(real_date);
UserProfile data = realm.where(UserProfile.class)
.equalTo("Email", email)
.findFirst();
if( data == null){
Log.d(RealmUpdate.class.getSimpleName(), "No account in DB.");
UserProfile userProfile = realm.createObject(UserProfile.class, email);
Log.d( getClass().getSimpleName(), "Value add: Start!?");
userProfile.setFName(fname);
Log.d( getClass().getSimpleName(), "Value add: fName!?");
userProfile.setLName(lname);
Log.d( getClass().getSimpleName(), "Value add: lName!?");
userProfile.setGender(gender);
userProfile.setBirthdate(date);
userProfile.setTel(tel);
Log.d( getClass().getSimpleName(), "Value add!?");
realm.close();
return;
}
Log.d(RealmUpdate.class.getSimpleName(), "Found account in DB");
data.setEmail(email);
data.setFName(fname);
data.setLName(lname);
data.setGender(gender);
data.setBirthdate(date);
data.setTel(tel);
realm.close();
} catch(ParseException exception) {
realm.close();
exception.printStackTrace();
Log.e( getClass().getSimpleName(), "Catch Error!!!");
}
}
}, new Realm.Transaction.OnSuccess() {
@Override
public void onSuccess() {
Log.d( getClass().getSimpleName(), "Add profile success");
}
}, new Realm.Transaction.OnError() {
@Override
public void onError(Throwable error) {
realm.close();
Log.d( getClass().getSimpleName(), "Add profile not success");
}
});
realm.close();
}
根据我的代码,我有 2 个名为 "realm" 的 Realm 对象,第一个在 main class 中声明,其他一个在匿名 inner-class 中声明。当我尝试将 main class 的名称 Realm 对象更改为
private Realm realm_test;
它只显示
处的错误realm.executeTransactionAsync(new Realm.Transaction() {
,anonymous inner-class中的代码还是可以的。但是当我像这样更改匿名内部 class 中的变量名称时,
public void execute(@NonNull Realm realm_test_inner){
匿名内部的代码-class也没有错误。
现在,我对这些很困惑,因为当我将数据插入数据库时它会导致错误(现在可以修复),但我仍然不确定它到底发生了什么?
此功能称为阴影。您可以在这里阅读:
https://docs.oracle.com/javase/tutorial/java/javaOO/nested.htm