3
這是我的問題。如何使這個「更清潔」
我有一堆由Gson序列化的配置類。它們都位於一個目錄中,並且序列化/反序列化過程非常相似,我覺得我應該將代碼移到父類中。
我終於想出了這個(我覺得這是可怕的做作):\
FooConfiguration.java:
package com.bar.foo;
import java.io.File;
import java.io.IOException;
public interface FooConfiguration {
/**
* Saves the configuration object to disk
* @param location the location to save the configuration
*/
public void save(File location) throws IOException;
}
FooConfigurationAbstract.java:
package com.bar.foo;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import com.google.gson.Gson;
public abstract class FooConfigurationAbstract implements FooConfiguration {
File location;
Gson gson;
@Override
public void save(File location) throws IOException {
FileUtils.writeStringToFile(location, gson.toJson(this), "utf-8");
}
}
FooConfigurationImpl.java:
package com.bar.foo;
- snip imports -
public class FooConfigurationImpl extends FooConfigurationAbstract {
/**
* Whether or not the we should use the new Bar feature
*/
@Expose
public Boolean useBar = false;
- snip more configuration values -
}
FooConfigurationFactory.java:
package com.bar.foo;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class FooConfigurationFactory<T extends FooConfiguration> {
public static Gson gson = new GsonBuilder()
.setPrettyPrinting()
.excludeFieldsWithoutExposeAnnotation()
.create();
public Class<T> clazz;
public File basePath;
public FooConfigurationFactory(File basePath, Class<T> clazz) {
this.basePath = basePath;
this.clazz = clazz;
}
public T load(String location) throws IOException {
return this.load(location, FooConfigurationFactory.gson);
}
public T load(String location, Gson gson) throws IOException {
return gson.fromJson(
FileUtils.readFileToString(
new File(this.basePath, location), "utf-8"),
this.clazz);
}
}
實例應用:
this.config = new FooConfigurationFactory<FooConfigurationImpl>(this.configDir, FooConfigurationImpl.class).load("config.json");
我覺得這是最醜陋的東西我在我的整個生活都看到。我的方法是錯誤的嗎?還是有更好的方法去做?
預先感謝您。
我個人認爲這是非常整潔和正確的代碼。我認爲它看起來不錯:/ –
我不得不問,你的配置複雜JSON有很多非拉丁-1字符?如果沒有,您是否嘗試過使用標準[.properties](http://en.wikipedia.org/wiki/.properties)文件?只是說上面的代碼看起來很好,但如果標準方法已經存在,可能不需要:-) – andyb
@Craig也許這只是我自己。 :) @andyb:我必須處理一堆UTF8字符和複雜結構,所以我不幸使用.properties文件。 –