泛型类型的绑定不匹配

时间:2018-09-16 01:45:42

标签: java

经过一天的搜索,我决定问问您的帮助人员:-) 这是我的问题: 我需要为一些波霍写掩护。

public abstract class Answer<T extends Serializable> implements Serializable {//some code}

public class BooleanAnswer extends Answer<Boolean> {//some code}

public abstract class AnswerDMO<T extends Serializable> implements Serializable {//some code}

public class BooleanAnswerDMO extends AnswerDMO<Boolean>  {//some code} 

public interface Converter<I, O> {
O convert(I input);
}

public abstract class AnswerConverter<A extends Answer<Serializable>, J extends AnswerDMO<Serializable>>
                                        implements Converter<A, J>, Serializable {
@Override
public J convert(A input) {
    // some code
}
}

public class BooleanAnswerConverter extends AnswerConverter<BooleanAnswer, BooleanAnswerDMO>
{
    @Override
    public BooleanAnswerDMO convert(BooleanAnswer input) {
        // some code
    }
}

我在BooleanAnswerConverter上遇到错误,参数BooleanAnswer不在其范围内,应扩展答案 我尝试了很多组合,但无法正确完成。

如何解决?

2 个答案:

答案 0 :(得分:1)

由于AJ扩展了AnswerAnswerDMO,并且它们具有类型,因此必须将AnswerConverter从以下位置更改:

public abstract class AnswerConverter<A extends Answer<Serializable>, J extends AnswerDMO<Serializable>>

收件人:

public abstract class AnswerConverter<A extends Answer, J extends AnswerDMO>

AnswerAnswerDMO具有强制Serializable的类型。在您的示例中为布尔值。 Answer<Serializable>将尝试确保最终实现是此实现,而不是通用答案。

此更改导致正确编译类:

public class BooleanAnswerConverter extends AnswerConverter<BooleanAnswer, BooleanAnswerDMO> {
    @Override
    public BooleanAnswerDMO convert(BooleanAnswer input) {
        return null;
    }
}

答案 1 :(得分:0)

我不知道这是否是您想要的,但可行的解决方案是

abstract class AnswerConverter<A extends Answer<? extends Serializable>,
        J extends AnswerDMO<? extends Serializable>> implements Converter<A, J>, Serializable {