E 'possibile testare un oggetto contro un tipo di componente e / o tipo ereditario?

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

  •  22-08-2019
  •  | 
  •  

Domanda

  

Aggiornamento: Sulla base delle risposte inizialmente sono andato il percorso di utilizzare IsInstanceOf (), che è stato progettato per questa esigenza. Tuttavia si è rivelato essere estremamente inefficiente per qualche motivo sconosciuto. Nel debug app tardi ho finito appena impostando alcune proprietà per l'oggetto da usare al posto di IsInstanceOf conseguente ordini di grandezza miglioramento della velocità.

Quello che sto cercando di fare è testare un oggetto in ColdFusion per vedere che tipo di componente che è. Qualcosa di simile ...

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

Ho pensato che questo era possibile, ma ricevo un errore dicendo il tipo sto passando non corrisponde a uno nella lista valida di tipi di ...

  

tipo valido argomenti sono: ogni, matrice, booleano, data, numerici, interrogare, cordicella, struct, UUID, GUID, binario, integer, float, eurodate, tempo, carta di credito, email, SSN, telefono, codice postale, URL, regex, gamma, componente o nomeVariabile.

C'è un modo per ottenere questo risultato in ColdFusion?

È stato utile?

Soluzione

Si potrebbe anche usare IsInstanceOf (). Anche se è comunque necessario utilizzare il percorso completo, può anche essere usato per determinare successione o identificare i componenti che implementano una particolare interfaccia.

<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>

Altri suggerimenti

Si potrebbe utilizzare GetMetaData per trovare il tipo. Alcuni Codice rapido:

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

è possibile utilizzare il nome o FullName dalla funzione getMetaData ().

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

o

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

docs sono qui getMetaData () su quello getMetaData () restituisce a seconda del tipo di oggetto.

Dan, sentitevi liberi di strappare il codice di MXUnit che fa esattamente quello che devi fare. Lo facciamo nel nostro assertIsTypeOf) asserzione (. Vedi qui per maggiori dettagli: http: // codice. google.com/p/mxunit/source/browse/mxunit/trunk/framework/MXUnitAssertionExtensions.cfc

Il motivo che stai vedendo il calo di prestazioni con isInstanceOf () molto probabilmente ha a che fare con l'impostazione this.customTagPaths nel vostro Application.cfc. Mi ha colpito questo me stesso e depositato un bug su di esso di recente. Speriamo che otterrà fissato in CF10, ogni volta che è.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top