将接口添加到已声明的类中?

时间:2018-06-19 01:48:08

标签: java inheritance interface extend

我有一个日期工具尝试从外部库管理多个日期格式,看起来像这样。

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));
}

原谅丑陋的伪代码,但是我可以做的任何事情来构建这样的逻辑模式,这样我就可以在现有的类中构建逻辑,以类似的方式对它们进行分组并仍然保持强类型的参数列表?

1 个答案:

答案 0 :(得分:0)

您无法向已初始化的类添加新方法或变量。你可以将一个类作为变量复制到你的自定义类中,但这非常混乱。

但我认为您遇到的真正问题是每种日期类型的可能性会大大增加

所以要保持线性,你只需要

public long toMillis (GoogleDateType date){
    return date.getMillis()
}
...

public GoogleDateType googleMillis (long millis){
    return new GoogleDateType(millis);
}
...

然后你可以

GoogleDateType g = googleMillis (toMillis(someJodaDateType));