有一个类已经存在:
public class TermsBuilder extends ValuesSourceAggregationBuilder<TermsBuilder> {
...
}
使用它的课程:
public class TermsClass {
...
((TermsBuilder) ret).runSomeFunction();
}
我创建了一个类TermsBuilderWrapper
并使用它:
public class TermsClass {
...
((TermsBuilderWrapper) ret).runSomeOtherFunction();
}
其中ret
是DateHistogramBuilder
类对象:
public class DateHistogramBuilder extends ValuesSourceAggregationBuilder<DateHistogramBuilder> {
...
}
但我收到警告Casting 'ret' to 'TermsBuilderWrapper' may produce 'java.lang.ClassCastException'
。
这里可能有什么问题?
更新:
我实现了TermsBuilderWrapper
之类的:
public class TermsBuilderWrapper extends ValuesSourceAggregationBuilder<TermsBuilder> {
...
}
答案 0 :(得分:0)
如果您想以这种方式投射,则TermsBuilder
或DateHistogramBuilder
课程需要实施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的后代。
我建议你多读一些关于继承的内容,因为看起来你还有一些差距。