接口函数在实现返回特定类型时返回无类型值(*)?

时间:2013-04-01 17:01:53

标签: actionscript-3

出于好奇,我想知道是否有可能让接口定义返回无类型值,而它的实现是否返回类型值?

例如,具有以下界面:

interfaceExample
{
    function someExampleFunction():*
}

以下列方式实施:

classA implements interfaceExample
{
    public function someExampleFunction():Int{ ... }
}


classB implements interfaceExample
{
    public function someExampleFunction():String{ ... }
}

(我用google搜索没有结果,也许我无法以正确的方式提问) 我想答案是“不管它是不可能的,接口不是那样的设计” - 所以什么才能成为一种友好的方式来实现这样的目标呢?

2 个答案:

答案 0 :(得分:0)

你是对的,这不会编译。这是因为编译器不支持从父类或接口重载方法签名。

如果你考虑一下,在实现接口时覆盖返回类型没有意义,因为使用你的接口API的代码不应该依赖于实现(intString返回值)。

使用的解决方案实际上取决于您最终要做的事情。通常,返回类型应该是您可以生成的不同类型之间的共同点。这也可以是另一个界面,它描述了对返回值的期望。

答案 1 :(得分:0)

虽然我对接口定义并不熟悉,但我知道我编写了许多与typed和untyped参数一起使用的函数。

如果您所描述的内容不可能,并且根据您正在做的事情,我建议您编写一个可以将无类型变量转换为类型变量的简单函数。他们很简单。然后,您可以调用此函数来处理通过接口定义传入的任何数据。

一个粗略的例子(未经测试):

function convertDataTo(type:String, input:*):*
{
    var rI:int;
    var rN:Number;
    var rS:String;
    var rB:Boolean;

    switch(type)
    {
        case "int":
            if(isNaN(int(input))
            {
                rI = 0;
            }
            else
            {
                rI = int(input);
            }
        break;
        case "Number":
            if(isNaN(Number(input))
            {
                rN = 0;
            }
            else
            {
                rN = Number(input);
            }
        break;
        case "Boolean":
            if(input == "true")
            {
                rB = true;
            }
            else if(input == "false")
            {
                rB = false;
            }
            else
            {
                rB = Boolean(input);
            }
            return rB;
        break;
        case "String":
            rS = input.toString();
        break;
        default:
            trace("Invalid data type!");
            return 0;
        break;
    }
}

您还可以重写此函数以将String类型转换为任何其他类型,并使您的接口定义始终返回字符串。另一方面,您可以使用类似的函数将所有变量转换为可由此函数解释的字符串。

顺便说一句,我必须使用这种字符串解释来编写我自己的脚本语言,以便在我的一个大型项目中使用。

当然,我不会假装直接回答你的问题,但我想抛弃这种意外情况,以防你所寻找的东西不起作用。