簡體   English   中英

匿名內部類中的變量和訪問

[英]Variable and access in anonymous inner-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”,第一個在主類中聲明,其他一個在匿名內部類中聲明。 當我嘗試將主類的名稱Realm對象更改為

private Realm realm_test;

它只在顯示錯誤

realm.executeTransactionAsync(new Realm.Transaction() {

,匿名內部類中的代碼仍然可以。 但是當我像這樣在匿名內部類中更改變量的名稱時,

 public void execute(@NonNull Realm realm_test_inner){

匿名內部類中的代碼也沒有錯誤。

現在,我對它們感到非常困惑,因為當我向數據庫中插入數據時,它會導致錯誤(現在可以修復),但是我仍然不確定它到底會發生什么?

此功能稱為陰影。 你可以在這里讀到它:

https://docs.oracle.com/javase/tutorial/java/javaOO/nested.htm

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM