2017-05-25 141 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) { 
     .... 
    } 
}