如何使方法接受具有两个接口的实例?

时间:2016-06-15 13:34:21

标签: java oop interface

我有几个接口:

public interface Speaker {
    void speak();
}

public inteface Walker {
    void walk();
}

我想要一个采用SpeakerWalker实例的方法。

现在,我可以实现另一个界面:

public interface WalkerSpeaker extends Walker, Speaker {

}

并接受:

void walkAndTalk(final WalkerSpeaker x) {
    x.walk();
    x.speak();
}

但是对于许多组合来说这是非常麻烦的,并且每个实现必须从WalkerSpeaker继承才能工作!

有更好的方法吗?

1 个答案:

答案 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,除非您不必为其编写单独的接口。