2012-10-26 82 views
2

我在我的課程中使用了泛型。 MyObject必須使用T作爲一個類,例如新的MyObject(Long.class)。在方法等於我想確保給該方法的參數是T的一個實例。通用實例作爲方法參數

Object<T>是不是一個有效的Java源,我知道。 我將它添加到代碼示例中,以顯示我的意思,即該值是T的一個實例。

但是,實現均等方法的正確方法是什麼?

public class MyObject<T extends Class> { 

    public boolean equal(Object<T> value) { 
     return true; 
    } 
} 
+0

你不重寫equals()(用's') –

回答

0

假設你了覆蓋Object.equals(Object)

T extends Class,使有限的意義,因爲Class是最後無論如何,所以唯一T可能會Class<U>一些U,然後你還不如請讓U爲類型參數。所以,你可能想它是這樣的:

public class MyClass<T> { 
    private Class<T> cl ; 
    public MyClass(Class<T> cl) { 
    this.cl = cl ; 
    ... 
    } 
    public boolean equal(T value) { 
    return true; 
    } 
} 

,然後你來寫,比方說,new MyClass<Long>(Long.class)

但是你確定需要在運行時存儲參數cl嗎?通常你會完全放棄它,所以你只寫new MyClass<Long>()

+0

這就是對的。我用類型作爲泛型和構造函數中的類...工作正常。謝謝 – Randbedingung

1

如果你重寫equals()方法,那麼你應該檢查類對象被用來比較平等。

  1. 簽名會表明你可以傳遞可以在不同的對象類型之間定義任何Object
  2. 平等(不經常發生,但它是有效的)

如果你不重寫equals(),我會將您的方法名稱更改爲截然不同的。否則,生活會非常混亂。

+0

我意識到命名方法「equal」不是一個好主意。我不想重寫Object.equals()...我的錯。無論如何thx :-) – Randbedingung

0

Assuming that you don't want to override equals。我認爲你應該做以下

public class MyObject<T> { 

    public boolean isEquals(T obj) { 
     return false; 
    }; 
} 

。在你的情況下,沒有必要的Class爲您傳遞TypeMyObject

MyObject<Long> myObject = new MyObject<Long>(); 
    myObject.isEquals(Long.valueOf(10);//It will only allow Long 
    myObject.isEquals(10);    //Fails for int 

參考

  1. Generic Types
  2. Lesson: Generics
相關問題