假設您遵循接口類的命名約定,如標準IInterfaceName
中所示,接口的名稱前綴大寫字母「I」,後跟大寫字母和類名的其餘部分。有幾種方法可以做到這一點。如果你有很多,可能因爲你可以這樣做一個參數傳遞不同的接口:
首先導入flash.utils.getQualifiedClassName
和你的函數:
public function getComponent(componentType:Class):Object
{
var name:String = getQualifiedClassName(componentType).replace(/.*\:+/g,"");
if (name.search(/^\I[A-Z]/g) != -1) {
trace("parameter is an interface!");
return null;
}
return new componentType();
}
您不必設置名稱變量,但這有助於使搜索更嚴格一些。你可能只是這樣做,而不是:
if (getQualifiedClassName(componentType).search(/\I[A-Z]/g) != -1) {
trace("parameter is an interface!");
return null;
}
如果你是不是已經知道,getQualifiedClassName
返回類名稱的字符串格式。正則表達式特別檢查大寫的IInterfaceName樣式字符串。
最後,如果你知道這只是一個接口,你可以簡單的只是這樣做:
if (componentType == IMyinterface) {
trace("component is a IMyinterface");
}
此時實施命名方案並不是真正的選擇。我正在開發的應用程序有數千個類,並且他們並不都遵循您提到的約定。我意識到運行時類型反射並不是真的在actionscript的控制之下。 – spierepf