2013-10-08 2 views
1

Ниже приведен пример, чтобы пояснить, что я смысл: Скажем, у меня есть два класса:интерфейс с методом, который требует параметра типа реализации в подписи

class A { 
    boolean isEqual(A instance); 
} 

и

class B { 
    boolean isEqual(B instance); 
} 

ли существует возможность в Java определять такой интерфейс, как

interface I { 
    // signature for isEqual(...) here 
} 

так, чтобы метод isEqual во всех реализациях s принимает параметр типа реализации? Как

class C implements I { 
    boolean isEqual(C instance); 
} 

Заранее благодарен!

+0

'T extends Object' ?? –

ответ

4

Я думаю, что-то вроде этого является то, что вы ищете:

interface Equatable<T> { 
    public boolean isEqual(T instance); 
} 

class C implements Equatable<C> { 
    boolean isEqual(C instance); 
} 

Это аналогично стандартному интерфейсу Comparable.

+0

это именно то, что я искал, и это даже не требовало специальных знаний! красивый и элегантный. Большое спасибо! – hoefling

+0

Я также смог сделать что-то подобное в C# – Matt

1

Есть ли возможность в Java, чтобы определить интерфейс, такие как ...

Да, в общей форме:

public interface I<T> { 
    public boolean isEqual(T instance); 
} 

public class C implements I<C> { 

    @Override 
    public boolean isEqual(C instance) { 
     return false; 
    }  
} 

Или, например, если класс A, B и C наследуем некоторый суперкласс, скажем DD.

Таким образом, вы можете написать:

interface I { 
    boolean isEqual(<? extends DD> instance); 
} 
+0

Это то же самое, что и ответ, который я принял, но спасибо в любом случае! – hoefling

Смежные вопросы