我有一个日期工具尝试从外部库管理多个日期格式,看起来像这样。
import GoogleDateType;
import JodaDateType;
import ProtoDateType;
// Simple conversion to milliseconds for each date type.
public static Long toMillis(GoogleDateType date) {
return date.getMillis();
}
public static Long toMillis(JodaDateType date) {
return date.getMillisFromEpoch()
}
public static Long toMillis(ProtoDateType date) {
return date.getSeconds() * 1000;
}
// Convert from date to date.
public static GoogleDateType toGoogleDateType(JodaDateType date) {
return new GoogleDateType(toMillis(date));
}
public static GoogleDateType toGoogleDateType(ProtoDateType date) {
return new GoogleDateType(toMillis(date));
}
// Lots more date conversions from type A to B, B to A, etc.
...
我希望通过给每个日期实现toMillis来实际降低编写所有这些的总成本。然后我可以写一个从接口到类型的转换。
import GoogleDateType;
import JodaDateType;
import ProtoDateType;
import MillisConversion
// Simple conversion to milliseconds for each date type.
public static Long toMillis(GoogleDateType date) implements MillisConversion<GoogleDateType> {
return date.getMillis();
}
public static Long toMillis(JodaDateType date) implements MillisConversion<JodaDateType> {
return date.getMillisFromEpoch()
}
public static Long toMillis(ProtoDateType date) implements MillisConversion<ProtoDateType> {
return date.getSeconds() * 1000;
}
// Just need one function now to convert anything to GoogleDateType.
public static GoogleDateType toGoogleDateType(MillisConversion date) {
return new GoogleDateType(toMillis(date));
}
原谅丑陋的伪代码,但是我可以做的任何事情来构建这样的逻辑模式,这样我就可以在现有的类中构建逻辑,以类似的方式对它们进行分组并仍然保持强类型的参数列表?
答案 0 :(得分:0)
您无法向已初始化的类添加新方法或变量。你可以将一个类作为变量复制到你的自定义类中,但这非常混乱。
但我认为您遇到的真正问题是每种日期类型的可能性会大大增加
所以要保持线性,你只需要
public long toMillis (GoogleDateType date){
return date.getMillis()
}
...
和
public GoogleDateType googleMillis (long millis){
return new GoogleDateType(millis);
}
...
然后你可以
GoogleDateType g = googleMillis (toMillis(someJodaDateType));