我面临以下问题。由于版本控制的原因,我需要使用相同的类名但不同的包将对象转换为另一个。我使用接口和实现类作为以下
//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运算符中使用类的完全限定名时,我得到编译错误。使用像这样的类的完整包时会出现什么问题?什么是可能的解决方案?提前谢谢!
答案 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) {
....
}
}