如何在这里解决潜在的ClassCastException?

时间:2016-01-27 20:14:45

标签: java classcastexception

有一个类已经存在:

public class TermsBuilder extends ValuesSourceAggregationBuilder<TermsBuilder> {
    ...
}

使用它的课程:

public class TermsClass {
    ...
    ((TermsBuilder) ret).runSomeFunction();
}

我创建了一个类TermsBuilderWrapper并使用它:

public class TermsClass {
    ...
    ((TermsBuilderWrapper) ret).runSomeOtherFunction();
}

其中retDateHistogramBuilder类对象:

public class DateHistogramBuilder extends ValuesSourceAggregationBuilder<DateHistogramBuilder> {
    ...
}

但我收到警告Casting 'ret' to 'TermsBuilderWrapper' may produce 'java.lang.ClassCastException'

这里可能有什么问题?

更新:

我实现了TermsBuilderWrapper之类的:

public class TermsBuilderWrapper extends ValuesSourceAggregationBuilder<TermsBuilder> {
    ...
}

2 个答案:

答案 0 :(得分:0)

如果您想以这种方式投射,则TermsBuilderDateHistogramBuilder课程需要实施TermsBuilderWrapper

还应该注意,要以这种方式使用,TermsBuilderWrapper需要是一个接口而不是一个类。 Java不支持扩展多个类。

public class DateHistogramBuilder implements TermsBuilderWrapper {
    ...
}

interface也不能extend一个班级。 TermsBuilderWrapper需要重新定义,

public interface TermsBuilderWrapper {
    ...
}

创建界面后,声明要在其正文中使用的方法。

public interface TermsBuilderWrapper {
    public Object runSomeFunction();
    public Object runSomeOtherFunction();
}

答案 1 :(得分:0)

ret是DateHistogramBuilder,这意味着它也是一个ValuesSourceAggregationBuilder,但是要投射&#34;任何东西&#34;到TermsBuilder,&#34;任何&#34;需要成为TermsBuilder的后代。

我建议你多读一些关于继承的内容,因为看起来你还有一些差距。