2016-05-30 55 views
-2

我有一個類叫Generic。我被分配創建一個名爲matches()的布爾方法,該方法接收另一個Generic作爲參數,如果可以在當前的Generic中找到兩個存儲的值,則返回true。值的順序並不重要。(新手)Java的泛型:可比較的

public class Generic<T extends Comparable<? super T>> { 
    ... 
    public boolean matches(Class Generic){ 
    return this.valueA = that.valueA && this.valueB = that.valueB): } 
    ... 
} 

我摸索找出類是如何能夠存儲多值valueAvalueB和從其他的一個區別this.valueA。我是否應該參考稱爲反射的概念以獲取更多信息?

+0

如果你不想使用可比較的,不要使用它:)你反正寫了你自己的名爲matches()的函數,它接受另一個相同類型的對象。比較值應該是直截了當的。如果object有a和b作爲參數,爲它們寫getter並調用這些函數來比較這些值。 –

+2

爲什麼你的'matches'方法將'Object'作爲參數而不是'Generic',如果你期望這個參數是'Generic'(因爲你正在做'instanceof'檢查)? – Jesper

+0

謝謝@SunilChakravarthy。我很難把我的頭圍繞在可比的概念上,因爲我是初學者。該類如何爲「storeValueA」和「storeValueB」分別存儲多個值? – wbxyqeuv

回答

2

如果類型參數T的目的是爲了領域valueAvalueB是這種類型的,而且matches()應當使用事實,他們是Comparable(因爲T extends Comparable),這是多麼:

public class Generic<T extends Comparable<? super T>> { 
    private T valueA; 
    private T valueB; 
    public boolean matches(Generic<T> that){ 
     return (this.valueA.compareTo(that.valueA) == 0 && 
       this.valueB.compareTo(that.valueB) == 0); 
    } 
} 

當然,假設引用類型強制Comparable一致,那麼您根本不需要Comparable

public class Generic<T> { 
    private T valueA; 
    private T valueB; 
    public boolean matches(Generic<T> that){ 
     return (this.valueA.equals(that.valueA) && 
       this.valueB.equals(that.valueB)); 
    } 
} 

請注意,這兩個示例都不能處理valueAvalueB的空值。

+0

謝謝@安德烈亞斯。這清除了很多混亂。 – wbxyqeuv