java—如何避免类层次结构中的泛型?

amrnrhlw  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(281)

我有下一个层次的类

class MyObject {

}

class FirstChild extends MyObject {

}

class SecondChild extends MyObject {

}

class Calculator<T extends MyObject> {
    public Integer calculateValue(T supperObject) {
        return 10;
    }
}

class IntegerCalculator extends Calculator<FirstChild> {
    @Override
    public Integer calculateValue(FirstChild supperObject) {
        return super.calculateValue(supperObject);
    }
}

class SecondChildCalculator extends Calculator<SecondChild> {
    @Override
    public Integer calculateValue(SecondChild supperObject) {
        return super.calculateValue(supperObject);
    }
}

class AbstractUsefulService {
    protected Calculator<? extends MyObject> calculator;

    public AbstractUsefulService(
        Calculator<? extends MyObject> calculator
    ) {
        this.calculator = calculator;
    }
}

class ImplementationOfAbstractUsefulService extends AbstractUsefulService{

    public ImplementationOfAbstractUsefulService(
        SecondChildCalculator calculator
    ) {
        super(calculator);
    }

    public void doJob(){
        calculator.calculateValue(new SecondChild());
    }
}

我这里有一个很大的问题计算器。calculatevalue(newsecondchild());-必修的?扩展了myobject,但找到了第二个子对象。我读了很多文章,只找到了一个解决方案和一个对abstractusefulservice的泛型,并在connectionservice中使用这个泛型,但我不想这样做。没有abstractusefulservice中的泛型,如何解决问题?

mbzjlibv

mbzjlibv1#

没有abstractusefulservice中的泛型,如何解决问题?
你不能,如果你想通过考试的话 calculatorAbstractUsefulService .
你需要知道物体的类型 calculator.calculateValue 我会接受的。
唯一的办法就是在 ImplementationOfAbstractUsefulService 班级:

class ImplementationOfAbstractUsefulService extends AbstractUsefulService{
    private final SecondChildCalculator secondChildCalculator;

    public ImplementationOfAbstractUsefulService(
        SecondChildCalculator calculator
    ) {
        super(calculator);
    }

    public void doJob(){
        secondChildCalculator.calculateValue(new SecondChild());
    }
}

相关问题