2011-01-24 88 views
1

如何做一个函数返回*,明星,我的意思是该函数能够返回任何东西,然后我可以相应地说明它?如何创建一个函数,可以返回任何动作

private function get_current_files_view():TileList 
    { 
     var tlist:TileList; 
     //switch(this[fm_model.files_display_type]) 
     switch(vs_file_display.selectedChild) 
     { 
      case cvs_user_files:  
       tlist = tlist_files; 
       break; 

      case bx_shared_data:      
       tlist = tlist_shared_with_me; 
       break; 
      default:  
       throw new Error('Invalid container found'); 
     } 
     return tlist; 
    } 

假设在此功能,我想这个函数返回二者的TileList和DataGrid(根据情况)什么应该被改变。

Plz让我知道 谢谢你。

回答

11

假设在此功能,我想这 函数返回二者的TileList和 数据网格(根据情况)什么 应该改变。

如果是这样的话,那么您应该返回ListBase,它是List和DataGrid的父类。

我想要能够返回任何对象,您可以指定返回类型为Object

如果你真的想返回任何东西,包括整数等你可以使用*的整数,正如在另一个答案中所述。如果这真的是你需要的,我的直觉就是你可能需要重构你的应用程序。

8

您不需要定义返回类型。如果不这样做,那么你可以返回任何东西,或没有(不推荐):

private function get_current_files_view() { } 

或者,你可以定义它,它必须返回的东西,但任何

private function get_current_files_view():* { } 

或者,你可以如果您想具体说明,请始终使用接口或基类:

private function get_current_files_view():ISomeInterface {} 

这对您有帮助吗?或者我完全误解你的问题?

+0

对于建议使用接口+1。我认为这是一个比*具有更好的开发方式作为返回类型。 – JeffryHouser 2011-01-24 19:50:42

+5

严格模式下的Flex编译器不会接受没有返回类型的方法。总是定义一个返回类型是最佳实践。 – 2011-01-24 20:06:01

+1

@TandemAdam:同意。我喜欢专门定义我的例程作为函数(返回某些... *,类型,对象等)或过程(返回void)。调用者很清楚是否期望收益。我将编辑我的回复以添加该建议。然而,我的变量,我很高兴混合静态类型和动态类型。然而,在函数中,我们应该指定一些东西。 – 2011-01-24 20:47:04

2
private function whatsMyObject:(parameter:*):* 
    { 
    switch (parameter.constructor) 
      { 
      case TileList:  trace("parameter is TileList"); 
           break; 

      case DataGrid:  trace("parameter is DataGrid"); 
           break; 

      default:   trace("parameter is neither TileList nor DataGrid"); 
      } 

    return parameter; 
    } 
相关问题