【发布时间】:2016-04-17 19:27:02
【问题描述】:
即使 Eclipse 在 bolt_component.xhtml 中标记行 #{cc.attrs.bolt.spec.size},代码似乎也能正常工作,因为无法解析 spec.size 的属性
bolt_component.xhtml
<composite:attribute name="bolt" type="model.bolts.Bolt" />
#{cc.attrs.bolt.spec.size}
我的抽象类
public abstract class Bolt implements Serializable {
protected BoltSpec spec;
I have setSpec()
but not a getSpec()
和具体的类
public class BoltHexHead extends Bolt implements Serializable {
private static final long serialVersionUID = 1L;
private BoltSpecHexHead spec;
public BoltSpecHexHead getSpec() {
return spec;
}
public void setSpec(BoltSpecHexHead spec) {
this.spec = spec;
super.setSpec(spec);
}
我意识到为什么 Eclipse 会标记,因为我没有 getSpec() 但是当我在 Bolt 中添加 getSpec 时,我在控制器中得到一个空指针,它使用 HexHeadBolt .getSpec() 在不应该的时候结果为空是。
if (analysisHexHeadWithNutOperational.getBolt().getSpec().getSize() == null) {
我尝试了多种 getter setter private protected 等的组合......
Eclipse 的标记是一个错误吗?还是我的继承设置不正确我正在使用 Luna
编辑
添加的屏幕截图显示即使使用更干净的 DRY 代码,使用参数化属性,Eclipses 仍然标记“大小”无法解析,但仅在自定义组件中
编辑2
通过将spec 添加到 cc 接口,我可以让 Eclipse 停止标记
方面
<stk:bolt_component boltTypes="#{data.hexHeadBoltTypes}"
bolt="#{hex_head_nut_operational.boltAnalysis.bolt}"
spec="#{hex_head_nut_operational.boltAnalysis.bolt.spec}" />
抄送
composite:interface>
<composite:attribute name="boltTypes" />
<composite:attribute name="bolt" />
<composite:attribute name="spec" />
【问题讨论】:
-
您是否尝试过使用
代替?当类型是 Bolt 时,调用 bolt.spec 需要隐式向下转换为 BoltHexHead,因为编译器不知道要使用哪个 Bolt 子类,所以在编译期间无法拾取。
标签: java eclipse jsf abstract-class composite-component