我建立了一個簡單的文檔存儲,有實體具有不同類型的字段,我有一個Float,Int和String類型。該實體包含值的數組列表,如果有人更新實體的模式,我希望能夠嘗試將值轉換爲新類型。使用類的泛型如何將一個類型的值轉換爲另一個類型?
public interface FieldType<T> {
ArrayList<T> values;
}
public class FloatField implements FieldType<Float> {
}
public class StringField implements FieldType<String> {
}
我曾經想過用一個有方法的抽象類,如下
public abstract class Field<T> implements FieldType<T> {
abstract public <T> castFromString(String value);
abstract public <T> castFromFloat(Float value);
abstract public <T> castFromInt(Int value);
}
public class FloatField extends Field<Float> {
@override
public <Float> castFromString(String value){
Float castValue = null;
try {
castValue = Float.parseFloat(value);
} catch(Exception e){
}
return castValue;
}
}
我真的不喜歡這個解決方案,我將不得不給每個我增加了一個額外的類型時添加一個新的抽象方法到系統。
任何想法我可以如何實現這一點更好?
這看起來不錯,如果它不能轉換爲正確的類型,我是否必須將try語句包裝在try catch中? –
如果你的意思是格式無效,是(例如'convert(「a」,Float :: parseFloat)')。修正了 – Moira
有沒有辦法讓FloatField返回轉換器,或者有一個方法可以調用convert,所以我不需要計算出要傳遞什麼函數? –