我有一个要求,我需要使用泛型,因为客户在使用我的服务时可以使用他们想要的数据类型。代码如下:
public interface MyService<T extends Base> {
void meth1(T type);
}
@Service("abc")
public class MyServiceImpl<T> implements MyService<T extends Base> {
@Override
public void meth1(T type) {
}
}
其中 Base 是一个抽象类。客户将使用它的子类来调用此服务。
public abstract class Base {
}
问题:实现类 (MyServiceImpl) 无法编译。我不确定这里的问题。
客户端将使用此服务并推送其作为 Base 子类的数据类型。例如这样的事情:
@Autowired
@Qualifier("abc")
private MyService<xx> service;
service.meth1(xx) //where xx is subclass of Base
我是不是在做一些根本性的错误。请提出建议。
最佳答案
类型绑定(bind)应该在类型参数的声明中:
public class MyServiceImpl<T extends Base> implements MyService<T>
关于具有有界参数的泛型的 Java 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49994385/