出于好奇,我想知道是否有可能让接口定义返回无类型值,而它的实现是否返回类型值?
例如,具有以下界面:
interfaceExample
{
function someExampleFunction():*
}
以下列方式实施:
classA implements interfaceExample
{
public function someExampleFunction():Int{ ... }
}
classB implements interfaceExample
{
public function someExampleFunction():String{ ... }
}
(我用google搜索没有结果,也许我无法以正确的方式提问) 我想答案是“不管它是不可能的,接口不是那样的设计” - 所以什么才能成为一种友好的方式来实现这样的目标呢?
答案 0 :(得分:0)
你是对的,这不会编译。这是因为编译器不支持从父类或接口重载方法签名。
如果你考虑一下,在实现接口时覆盖返回类型没有意义,因为使用你的接口API的代码不应该依赖于实现(int
或String
返回值)。
使用的解决方案实际上取决于您最终要做的事情。通常,返回类型应该是您可以生成的不同类型之间的共同点。这也可以是另一个界面,它描述了对返回值的期望。
答案 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类型转换为任何其他类型,并使您的接口定义始终返回字符串。另一方面,您可以使用类似的函数将所有变量转换为可由此函数解释的字符串。
顺便说一句,我必须使用这种字符串解释来编写我自己的脚本语言,以便在我的一个大型项目中使用。
当然,我不会假装直接回答你的问题,但我想抛弃这种意外情况,以防你所寻找的东西不起作用。