所以我有一段看起来像这样的代码:
Metrics metrics = null;
try {
metrics = metricsService.getCurrentMetrics();
} catch (SQLException e) {
e.printStackTrace();
}
//Do some stuff with the metrics
我最近实施了一种单独的机制,作为在单独的类下跟踪API指标的方法,巧妙地称为APIMetrics。
因此,通过此更改,代码看起来像这样:
Metrics metrics = null;
APIMetrics apiMetrics = null;
try {
if(user.isAPI())
apiMetrics = metricsService.getCurrentAPIMetrics();
else
metrics = metricsService.getCurrentMetrics();
} catch (SQLException e) {
e.printStackTrace();
}
//Do some stuff with the metrics
问题在于下面的代码,"用指标来做一些事情"都是根据使用metrics对象编写的。有没有办法我可以设置它,以便"指标" object不仅指Metrics类型的对象,而且我们想要使用的对象是什么?
因此,例如,如果我们有非API用户,我们希望指标的类型为Metrics,结果为metricsService.getCurrentMetrics()。但是,如果我们有API用户,我们希望指标的类型为APIMetrics,结果为metricsService.getCurrentAPIMetrics()。
有什么好办法可以解决这个问题吗? Metrics和APIMetrics类共享所有方法。我知道可能有一种方法可以使用继承或多态来做到这一点,但我无法弄清楚到底要做什么。谢谢!
答案 0 :(得分:5)
使类Metrics
和APIMetrics
实现相同的接口。然后,声明一个类型为此接口的单个变量,相应地初始化它并通过代码使用它。
答案 1 :(得分:0)
是的,根据上面的回答,您可以使两个类都实现一个声明所有方法的接口。
public interface MetricsInt(){
// declare common methods
}
在您的代码中,您可以引入一个工厂方法,该方法将用户作为输入并返回预期类型的Metrics实例。由于变量属于MetricInt类型,因此可以将两种类型的对象都设置为它。
MetricsInt metrics = null;
try {
metrics = metricsService.getCurrentMetricsForUser(user);
} catch (SQLException e) {
e.printStackTrace();
}