项目问题很复杂,我简化成一个小模型,代码如下
三个数据类,有继承关系,实现项目中会有多个子类,但简单起见只写两个
一个业务接口,对每一种类型的数据,都会有一个业务的实现。但是其中的 f1 方法会是所有的业务都使用的共同的逻辑,所以在业务接口和业务实现的中间加了一个抽象的 AbstractService 实现类,让方法 f1 在这里实现。实现项目中,f1 方法会有很多,简单起见我只写一个。但是如此一来,业务实现类在泛型上就不好实现了,怎么编译都通不过。
原因么,大概知道,只要去掉抽象的 AbstractService 类,实现逻辑全部写到子类中去就可以了,但一方面这类方法有点多,另一方面维护也麻烦(如果逻辑有点bug,要把所有的子类代码全部改一次)。
public class Fruit { } public class Apple extends Fruit { } public class Orange extends Fruit{ } public interface IService <F extends Fruit>{ void f1(F f); void f2(F f); } public abstract class AbstractService implements IService<Fruit>{ public void f1(Fruit f) { System.out.println(f); } } public class AppleService extends AbstractService implements IService<Apple>{ public void f2(Apple f) { System.out.println(f); } }
自己已经解决了
抽象实现类不要声明实现接口就可以了