É possível testar um objeto contra um tipo de componente e / ou tipo herdado?

StackOverflow https://stackoverflow.com/questions/879388

  •  22-08-2019
  •  | 
  •  

Pergunta

Update: Com base nas respostas que inicialmente foi a rota de usar IsInstanceOf (), que foi projetado para essa necessidade. No entanto, acabou por ser extremamente ineficiente por algum motivo desconhecido. Na depuração o aplicativo mais tarde I terminou apenas definir algumas propriedades no objeto para usar em vez de IsInstanceOf resultando em ordens de melhoria de velocidade magnitude.

O que estou tentando fazer é testar um objeto no ColdFusion para ver que tipo de componente que é. Algo como ...

<cfif isValid( "compath.dog", currentObj)>
    ...do something specific with dog objects...
</cfif>

Eu pensei que isso era possível, mas receber um erro dizendo que o tipo eu estou passando não corresponde a um na lista válida de tipos ...

argumentos de tipo válidos são: qualquer, array, booleano, data, numérico, consulta, corda, struct, UUID, GUID, binário, inteiro, float, eurodate, tempo, cartão de crédito, e-mail, CPF, telefone, CEP, url, regex, gama, componente ou variableName.

Existe uma maneira de fazer isso no ColdFusion?

Foi útil?

Solução

Você também pode usar IsInstanceOf (). Embora você ainda deve usar o caminho completo, ele também pode ser usado para determinar herança ou identificar os componentes que implementam uma interface específica.

<cfif IsInstanceOf(obj, "compath.Dog")>
   yes. it is a dog component {woof}
<cfelse>
    some other type of component 
</cfif>

<cfif IsInstanceOf(obj, "compath.AnimalInterface")>
     yes. it implements the animal interface
<cfelse>
     no. it must be vegetable or mineral ...
</cfif>

Outras dicas

Você pode usar GetMetadata para encontrar o tipo. Algum código rápida:

<cfif GetMetaData(currentObj).type eq "compath.dog">

Você pode usar o nome ou nome completo da função GetMetadata ().

<cfif GetMetaData(currentObj).name eq "compath.dog">
    ...do something specific with dog objects...
</cfif>

ou

<cfif GetMetaData(currentObj).fullname eq "compath.dog">
    ...do something specific with dog objects...
</cfif>

docs aqui GetMetadata () sobre o que GetMetadata () retorna, dependendo do tipo de objeto.

Dan, sinta-se livre para rasgar o código fora do MXUnit que faz exatamente o que você precisa fazer. Fazemo-lo em nossa assertIsTypeOf () afirmação. Veja aqui para mais detalhes: http: // código. google.com/p/mxunit/source/browse/mxunit/trunk/framework/MXUnitAssertionExtensions.cfc

A razão que você está vendo o desempenho atingido com isInstanceOf () provavelmente tem a ver com a criação this.customTagPaths em sua Application.cfc. Eu bati isso mesmo e entrou com um bug sobre ele recentemente. Esperemos que ele vai ficar fixo na CF10, sempre que é.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top