1

出于好奇,我想知道是否可以让接口定义返回非类型化值,而其实现返回类型化值?

例如,具有以下接口:

interfaceExample
{
    function someExampleFunction():*
}

实施以下方式:

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


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

(我用谷歌搜索没有结果,也许我无法问正确的方法)我想答案是'不,无论如何都不可能,界面不是那样设计的' - 那么可能是什么一种友好的方式来实现这样的事情?

4

2 回答 2

0

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

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

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

于 2013-04-01T18:03:01.783 回答
0

虽然我对接口定义不是很熟悉,但我确实知道我编写了很多处理类型化和非类型化参数和返回的函数。

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

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

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 类型转换为任何其他类型,并让您的接口定义始终返回字符串。另一方面,您可以拥有一个类似的函数,将所有变量转换为可由该函数解释的字符串。

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

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

于 2013-04-01T18:06:30.383 回答