2013-06-11 50 views
0

在我正在構建的應用程序中,我正在檢索字段標題「private」的值,我需要將其返回以供在應用程序中使用。正如你可能看到的那樣,該字段的標題給了我內部JAVA的問題,因爲該字段正在混淆。私人字段名稱與Java中的私有字符串名稱混淆

什麼是解決這個問題的最佳方法?讓我知道你是否需要我澄清任何事情。

JSON

"private": true, 

的Java

private String private; 

public String getPrivate() { 
    return private; 
} 

更新

我沒有訪問以編輯返回JSON的頁面。更改JSON中的值是顯而易見的選擇,但我想知道是否有辦法以某種方式繞過JAVA。


注意

感謝您的建議大家!我很感激。

+0

變化的變量名(其中JSON是從正在添加)。 – darijan

+1

這將永遠不會工作private是Java中的保留關鍵字。 –

+0

@PeterJaloveczki我知道它永遠不會工作。這就是我要求提出建議的原因。你有什麼? – localhost

回答

6

private是java中的關鍵字,因爲它們是保留的,所以不能將它們用於變量名稱。您需要將您的變量重命名爲其他名稱。正如javadoc所說:

您不能在程序中使用任何關鍵字作爲標識符。

這裏是關鍵字的完整列表的Javadoc參考:

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html

0

你可以做的就是改變變量名isPrivate

0

你不說你是什麼用於在JSON和Java之間進行轉換,但它似乎基於JavaBeans命名約定。如果這是真的,那麼你需要的變量沒有關係的方法,用來訪問它的名字:

private String fubar; 

public String getPrivate() { 
    return this.fubar; 
} 

public void setPrivate(String value) { 
    this.fubar = value; 
} 

如果您使用的是IDE生成getter和setter,你必須手動編輯方法名稱。您可能還需要編輯參數名稱以保持一致性。

如果您使用忽略getter/setters並直接訪問該變量的框架,那麼您沒有多個選項。一個String.replace()會工作,但它也將損害JSON像

{ `"foo": "this is private: do not publish"` } 
2

正如其他人指出,問題的事實,private是Java中的關鍵字所致。

你有三個選擇:

  • 更改您的JSON,這樣你就不能使用private(或任何其他Java關鍵字)作爲一個JSON屬性名。

  • 調整您正在使用的JSON綁定,以便將違規屬性名稱映射到合法Java標識符。例如,如果您使用的是JSON Jackson數據綁定,那麼執行此操作的簡單方法是使用getter/setter爲不同名稱的字段(例如proivit)編寫Java類,然後添加@JsonProperty("private")註釋到getProivit方法。

  • 如果您手動編寫Java類,則可以使用任何(合法)名稱作爲私有變量。所以只寫這樣的代碼:

    private String proivit; 
    
        public String getPrivate() { 
         return proivit; 
        } 
    
+1

+1爲傑克遜的'JsonProperty'。這就是我會用的。 –

+0

你的第三個選擇是好的,但它返回null。我需要它返回私人JSON字段的值。 – localhost

+0

你使用什麼綁定?它必須直接注入'proivit'變量而不是使用setter。 (或者你放棄了二傳手?) –