我有几个接口:
public interface Speaker {
void speak();
}
public inteface Walker {
void walk();
}
我想要一个采用Speaker
和Walker
实例的方法。
现在,我可以实现另一个界面:
public interface WalkerSpeaker extends Walker, Speaker {
}
并接受:
void walkAndTalk(final WalkerSpeaker x) {
x.walk();
x.speak();
}
但是对于许多组合来说这是非常麻烦的,并且每个实现必须从WalkerSpeaker
继承才能工作!
有更好的方法吗?
答案 0 :(得分:54)
您可以使用泛型来实现此目的
import { Injectable } from '@angular/core';
import { Product, WidgetItem, WidgetItemService } from '../index';
@Injectable()
export class ProductService {
getWidgetItems(product_id: number) {
var widget_items: WidgetItem[] = [];
this.widgetItemService.getAll().then((found_widget_items: WidgetItem[]) => {
widget_items = found_widget_items.filter(widget_item => widget_item.product_id == product_id);
return Promise.resolve(widget_items);
}).catch(error => {
return Promise.reject(error);
});
}
constructor(
private widgetItemService: WidgetItemService
) {
};
}
类型参数public <T extends Speaker & Walker> void walkAndTalk(T x) {
x.walk();
x.speak();
}
将是&#34;双重的&#34;对于这两个接口,所以实质上T
将是T
,除非您不必为其编写单独的接口。