【问题标题】:Super interface and super class having the same method name具有相同方法名的超接口和超类
【发布时间】:2012-01-29 22:51:51
【问题描述】:

我正在尝试创建一个 spark 数据网格项渲染器。这个项目渲染器扩展了一个复选框,并实现了 IGridItemRenderer

public class CellCheckBoxItemRenderer extends CheckBox implements IGridItemRenderer

我在实现IGridItemRenderer时,需要实现接口方法,以下方法有问题:

public function get hovered():Boolean
{
}

public function set hovered(value:Boolean):void
{
}

因为方法也是从复选框继承的

编辑 函数的签名

//spark checkbox signature
protected function get hovered():Boolean
protected function set hovered(value:Boolean):void

上面的签名属于IGridItemRenderer接口

【问题讨论】:

  • 类和接口中的方法是否具有相同的签名?
  • 你能在这里列出函数的签名吗?也许我或其他人建议一些解决方法
  • @Eugeny89 我已经编辑了问题

标签: actionscript-3 apache-flex flex4.5 flex-spark


【解决方案1】:

我猜IGridItemRenderer 的实现是更重要的部分,所以你可以在数据网格中使用它。 CheckBox 仅提供功能,如果我认为存在冲突,您不必扩展它。

public class CellCheckBoxItemRenderer implements IGridItemRenderer {

    private var checkBox:CheckBox;

    public function getCheckBox {
        return checkBox;
    }

    //...
}

如果CheckBox 将实现任何有用的接口,您也可以在渲染器中实现它们并将方法委托给复选框,这样您就可以封装整个复选框。不过这里不是这样。

【讨论】:

    【解决方案2】:

    问题在于接口在设计上只为 public 函数指定签名,而 Checkbox 中的函数被设置为 protected

    唯一的解决方案:

    • CellCheckBoxItemRenderer中删除接口/Checkbox
    • 从界面中移除声明
    • 更改 Checkbox 使 hovered 成为公共属性
    • 可能可以使用 as3 commons 字节码项目 (http://www.as3commons.org/as3-commons-bytecode/emit.html) 动态更改访问器,但我我不是 100% 确定。

    【讨论】:

      猜你喜欢
      • 2011-11-23
      • 2020-08-29
      • 1970-01-01
      • 2013-11-13
      • 1970-01-01
      • 2018-11-04
      • 1970-01-01
      • 2020-03-20
      • 2015-10-23
      相关资源
      最近更新 更多