Могу ли я иметь аргумент метода с типом "этот класс"? - PullRequest
4 голосов
/ 28 августа 2010

Я хочу иметь аргумент типа "этот класс" в сигнатуре метода интерфейса, чтобы любой класс, например MyClass, реализующий его, имел этот метод с аргументом типа MyClass.

public interface MyInterface {
    public <em>thisClass</em> myMethod(<em>thisClass</em> other);
    ...
}
public class MyClass implements MyInterface {
    // has to reference this class in the implementation
    public <em>MyClass</em> myMethod(<em>MyClass</em> other){
        ...
    }
}
Возможно ли это, или я должен просто связать аргумент с интерфейсом и сделать так, чтобы каждая реализация проверяла его?

Ответы [ 2 ]

3 голосов
/ 28 августа 2010

Это несколько означает, что T является классом, реализующим интерфейс:

public interface MyInterface<T extends MyInterface<T>> {
   public T myMethod(T other);
   ...
}
3 голосов
/ 28 августа 2010
public interface MyInterface<T> {
   public T myMethod(T other);
   ...
}

public class MyClass implements MyInterface<MyClass> {
   // has to reference this class in the implementation
   public MyClass myMethod(MyClass other){
      ...
   } 
}
...