2015-03-13 89 views
0

我對這個問題沒有更好的標題,你可以幫我改變它。如何使一個變量指示另一個對象?

class Example { 

    class A { 
     private String str; 

     public String getStr() { 
      return str==null ? "nothing" : str; 
     } 

     public void setStr(String str) { 
      this.str = str; 
     } 
    } 

    public static void main(String[] args) { 
     A a = null; 
     loadA(a); 
     System.out.println(a.getStr()); 
    } 

    private static void loadA(A a) { 
     // a = ****; 
     // in my project, a is load from a json string using Gson 
     // Gson cannot modify a Object, it can only create a new one, say b 
     // I tried to copy every field from b to a 
     // but the method getStr do not always return the true str 
     // so I may have to create another method "getTrueStr()" which feels bad 
    } 

} 

考慮解決方案和問題:

  1. a = Gson.createAnotherA()

它不工作。

  1. 我想每場從B複製到

getStr()並不總是返回真正的STR的方法,所以我可能要創建另一個方法getTrueStr()這讓我感覺不好。

  • clone()
  • 讓我感覺更糟糕。

    1. a = loadA(a);

    這一個很好。但我不喜歡它。因爲我有其他loadB(),loadC(),他們不需要這種語法,它看起來不和諧。如果沒有更好的解決方案出現,我會選擇這一個。

    問題是,如果我不選擇我給定的解決方案,我該怎麼辦?

    如果我給出的方法的參考A a,我怎麼能讓它,而不是使用clone()和我上面寫的相同的另一個對象。

    +0

    你想* *一個方法來加載'A' *和*'B'的實例? – 2015-03-13 09:24:37

    +0

    @LutzHorn我不太瞭解你。 B 13 – bijiDango 2015-03-13 09:27:12

    +2

    也許你應該發出一個問題。你的問題沒有一個單一的問題。你只是告訴我們你的感受。所以你想創建一個A類型對象的複製/克隆? – isnot2bad 2015-03-13 09:27:47

    回答

    0

    我這個就出來了。完全滿足我的需求,看起來不錯。

    類A {

    private A reference; 
    
        private String name; 
    
        public A() { 
         reference = this; 
        } 
    
        public void setReference(A ref) { 
         reference = ref; 
        } 
    
        public void setName(String name) { 
         reference.name = name; 
        } 
    
        public String getName() { 
         return reference.name; 
        } 
    
    } 
    
    2

    我認爲你的問題真的在於你的getStr方法,它不是一個真正的getter,它包含了一些邏輯。是否有可能處理這個課外A

    據我所知,您要創建對象b(類型A),它是現有實例a的副本。

    因爲a是從JSON加載的,所以您可以再次讀取JSON,它應該創建一個新的實例。我想因爲某種原因你不能這樣做。

    而不是使用JSON序列化或clone方法(這不應該使用在所有 - 它具有多種缺陷),你可以創建一個「拷貝構造」:

    +0

    複製構造器很棒。我應該想到它。其實我不想像你說的那樣「創造物體b」。事實上,我必須創建一個'b',然後使'a'有點像'b'的「副本」。 – bijiDango 2015-03-13 09:45:54

    +0

    我想過兩次,不,你的解決方案不能勝任。如果我做了'a = new A(b)','main()'中的'a'不會更新到新對象,所以我不能打印它。 – bijiDango 2015-03-13 09:53:20

    +0

    對不起?我不明白。你是什​​麼意思「它不會更新到新的對象」?你調用'new A(...)',把它分配給'a',所以'a'現在是一個新的實例。你想達到什麼目的? – 2015-03-13 09:55:38

    相關問題