2017-05-25 174 views
0

我正面臨以下問題。由於版本原因,我需要使用相同的類名稱但不同的包將對象轉換爲另一個對象。即時通訊使用一個接口和一個實現類爲以下的人Java泛型 - 使用具有相同類名的類型實現兩種泛型類型的方法

//interface class 
    public interface SampleConverter { 
      <T,S> T convert(S type); 
    } 



//concrete class 
import com.test.v1.A 
public class TestConverter implements SampleConverter { 
    <A,com.test.v2.A> A convert(com.test.v2.A type) { // compile time error 
     .... 
    } 
} 

但即時得到編譯錯誤,當我使用的鑽石運營商內部的類的完全限定名。當使用這種類的完整軟件包時會出現什麼問題,以及可能的解決方案是什麼?提前致謝!

+0

嘛,有什麼錯誤? – dimo414

+0

令牌「。」上的語法錯誤,預期延伸 – eleniVl

+1

通用類型參數必須是有效的標識符,它們不能包含點。 –

回答

1

讓我們來看看你的TestConverter類。該行

<A,com.test.v2.A> A convert(com.test.v2.A type) { .... 

定義了一種新的通用方法。在這些聲明中, <>之間的標識符是類型的佔位符,而不是實際類型。並且類型標識符 的名稱中可能不包含點。聲明該方法的正確方法是:

<A, B> A convert(B type) { ... } 

與您在界面中完全相同。

我想你真正想要的是這樣的:

public interface SampleConverter<T, S> { 
     T convert(S type); 
} 

import com.test.v1.A 
public class TestConverter implements SampleConverter<A, com.test.v2.A> { 
    public A convert(com.test.v2.A type) { 
     .... 
    } 
}