Как создать универсальные методы интерфейса? - PullRequest
0 голосов
/ 02 ноября 2011

возможно ли создать универсальный метод в интерфейсах?

говорят, что я хочу создать интерфейс

public interface Merge {
    public void merge(Object host, Object other);
}

тогда я хочу, чтобы реализующий класс реализовал это, но определил тип хоста и другие.

, например

public class FooBazMerge implements Merge {
    public void merge(Foo host, Baz other){
        // merge some properties
    }
}

причина, по которой я хочу сделать это, состоит в том, чтобы я мог сделать что-то подобное

public class SomeObject {
    private Merge merge;
    private Foo foo;
    private Baz baz;        

    public setMerge(Merge merge){
        this.merge = merge
    }

    public void merge(SomeObject anotherObject){
        merge.merge(this.foo, anotherObject.getBaz()); 
    }
}

Я в основном хочу делегировать ответственность / логику слияния someObject FooBazMerge. таким образом, я могу изменить реализацию его слияния, не прибегая к изменению моделей предметной области каждый раз, когда необходимо внести корректировку.

Ответы [ 3 ]

3 голосов
/ 02 ноября 2011
public interface Merge<A,B> {
    public void merge(A host, B other);
}

это то, что вы ищете? Это правильный синтаксис. Ваш реализующий класс будет выглядеть так:

public class FooBazMerge implements Merge<Foo, Baz> {
    public void merge(Foo host, Baz other){
        // merge some properties
    }
}
3 голосов
/ 02 ноября 2011

Кажется, вы хотите что-то вроде ...

public interface Merge<T,S> {
    public void merge(T host, S other);
}
1 голос
/ 02 ноября 2011

Посетите эту страницу для хороших примеров реализации универсального интерфейса. Это должно помочь в том, как его реализовать.

http://www.java2s.com/Code/Java/Language-Basics/Agenericinterfaceexample.htm

...