2017-02-27 26 views
0

我的情況是不同的,但作爲一個例子如何限制普通類型的接口只接受實施者類

public interface Comparable<T> 

會允許我說:

public class MyType implements Comparable<OtherType> 

但這是很少你想要什麼實現。

有沒有辦法來我說:

public class MyType implements Comparable<MyType> 

我得到的最接近是:

public interface Comparable<T extends Comparable<T>> 

這隻能部分,因爲它不會允許OtherType如果它本身不具有可比性,但會允許:

public class MyType implements Comparable<Integer> 

滿足條件。

+5

無法在Java中完成。至少不是在編譯時。 – shmosel

+2

也許如果你說爲什麼你需要在編譯時執行這樣的限制,我們可以拿出不同的設計。請參閱http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem – SergGr

+0

@SergGr簡單地減少運行時檢查。該接口的默認方法會執行整個註釋處理,並嚴格要求它們具有相同類型(或至少是一個子類型)。 – Mordechai

回答

2

這在Java中不可行。

請考慮是否可以要求類型參數Comparable與實現類相同。然後,如果你有一個class Foo implements Comparable<Foo>,然後class Bar extends Foo,Bar也將自動實現Comparable<Foo>通過繼承在Java的作品。但是這違背了實現類與類型參數相同的約束,因爲Bar未實現Comparable<Bar>(並且甚至不能明確地使Bar實現Comparable<Bar>,因爲類不能實現具有兩個不同類型參數的泛型類型)。

+0

關於違約的好處。 – Mordechai

相關問題