2011-10-12 58 views
3

我有一種方法。 它接受一個參數,它可以是ProviderString類的對象。 現在,如果我告訴方法接受對象,然後我可以通過它ProviderString對象,但我想使它使用泛型類型安全,並通過只有ProviderString。我該怎麼做,這可能嗎?
我要實現的是這樣的:Java泛型通配符具有多個類類型的單個參數

public <T can be String or Provider> void myMethod(T value) 

我看了一下this question,但它不會在我的情況下工作,因爲沒有ProviderString是一個接口。

回答

7

您不應該(也不能)爲此使用泛型。而不是簡單地提供兩個重載方法:

public void myMethod(String value); 
// and 
public void myMethod(Provider value); 

因爲兩者都需要有一些不同處理反正它實際上是簡單的這種方式。

+0

我曾考慮過重載選項,但因爲兩者在我的方法中都有相同的處理方式,所以我想知道是否可以通過泛型完成。如果它不能完成,那麼我現在將使用超載。謝謝你的答案。 –

+1

@HarshadVyawahare:* how *你能以完全相同的方式處理'String'和'Provider'嗎?他們(可能)不會分享​​任何有趣的方法。那些對象實際上做了些什麼?你能舉一個例子,你可以用同樣的方式處理它們嗎? –

+0

from myMethod我正在調用另一個方法,它被重載以接受'Sting'或'Provider'。這是我對這兩個對象的唯一使用。 –

1

不,這是不可能的。如何簡單地使用兩個重載的方法呢?

public void myMethod(String value) 
public void myMethod(Provider value) 
+0

謝謝你的回答!好的,如果這不可能通過泛型,那麼我將使用重載。 –

0

究竟爲什麼「提供者」或「字符串」?他們有什麼共同點,使你的方法適用於他們兩個?例如,都是Comparable?那麼你應該在那裏使用Comparable。如果他們沒有共同點,也許有一個原因,你不能做你想做的事情。在那種情況下,就像其他人所建議的那樣,使用重載。

+0

inflagranti - 它們都是(String或Provider)都可以作爲參數傳遞給我在myMethod中調用的方法。 –

+0

這個被調用的方法的實現是使用超載我猜? –

+0

是的,你是對的。 –