Java Generics - 使用具有相同类名的类型实现具有两种泛型类型的方法

时间:2017-05-25 07:48:13

标签: java generics

我面临以下问题。由于版本控制的原因,我需要使用相同的类名但不同的包将对象转换为另一个。我使用接口和实现类作为以下

//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
        ....
   }
}

但是当我在diamond运算符中使用类的完全限定名时,我得到编译错误。使用像这样的类的完整包时会出现什么问题?什么是可能的解决方案?提前谢谢!

1 个答案:

答案 0 :(得分: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) {
        ....
   }
}
相关问题