2012-03-05 99 views
6

請原諒我,如果這是微不足道的或不可能的,但我在這裏有星期一早上的時刻。使用Gson加載對象

我想創建一個方法,實現一些方法從Gson庫加載一些設置對象。基本上,我有一堆不同的設置對象,但我不想HABE覆蓋每個類的load方法我想有這樣的:

public class ConfigLoader { 
    public static void main(final String[] args) { 
     final ConfigurationSettings loadedConfigSettigs = 
      load("testSettings.json", ConfigurationSettings.class); 

     final AlternativeConfigurationSettings alternativeConfigSettigs = 
      load("testSettings2.json", AlternativeConfigurationSettings .class); 
    } 

    public T load(final InputStream inputStream, final Class<T> clazz) { 
     try { 
      if (inputStream != null) { 
       final Gson gson = new Gson(); 
       final BufferedReader reader = 
        new BufferedReader(new InputStreamReader(inputStream)); 
       return gson.fromJson(reader, clazz); 
      } 
     } catch (final Exception e) { 
     } 
     return null; 
    } 
} 

在那裏我可以在InputStream通和我想返回的對象的類。有沒有簡單的方法來做到這一點(我不想爲每個我想要加載的類創建一個方法,我也不想爲每個類創建一個特定的加載器)?

+2

問題是什麼?在代碼中唯一不正確的是Object的鍵入,因爲它不是「可打字的」。你應該直接返回T。 – 2012-03-05 12:44:50

+0

感謝您指出這種疏忽。我修改了代碼並給出了更多的上下文來展示我想如何使用它。我基本上希望有一個加載器,在給定類傳遞給它的情況下加載一個對象,而不必爲每個類創建一個加載器(因爲我不得不使用'Class '方法)? – 2012-03-05 12:57:23

+0

好的,但這個工程,對(除了你傳遞一個字符串,而不是一個InputStream,但我們明白你的觀點)? (或者告訴我們你有什麼問題)。我沒有看到你想要做什麼以及你怎麼做的問題。那麼,什麼阻止了你? – 2012-03-05 13:03:01

回答

10

下面的代碼工作(需要Java 1.5或以上):

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import com.google.gson.Gson; 


public class ConfigLoader { 
    public static void main(final String[] args) { 
     final ConfigurationSettings loadedConfigSettigs = load(new FileInputStream(new File("testSettings.json")), 
       ConfigurationSettings.class); 

     final AlternativeConfigurationSettings alternativeConfigSettigs = load(new FileInputStream(new File("testSettings2.json")), 
       AlternativeConfigurationSettings.class); 
    } 

    public static <T> T load(final InputStream inputStream, final Class<T> clazz) { 
     try { 
      if (inputStream != null) { 
       final Gson gson = new Gson(); 
       final BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); 
       return gson.fromJson(reader, clazz); 
      } 
     } catch (final Exception e) { 
     } 
     return null; 
    } 
} 
+0

謝謝。這對工作確實如此。你能否向我解釋' T'。我不太確定那是做什麼的? – 2012-03-05 13:35:26

+0

第一顆鑽石表示你將使用'T'類型,第二顆則是你的方法的實際返回類型。您也可以聲明,然後這將強制使用MyConfigSettings類或其一個子類。例如,您也可以聲明多個類型>。有關更多詳細信息,請參閱Java中的泛型文檔 – 2012-03-05 13:36:33

+0

謝謝。非常豐富。 – 2012-03-05 13:42:16