AS3 TypeError: Error #1007: Instanciation tentée sur un non-constructeur
Pour une raison que je ne peux pas obtenir que cela fonctionne (très simplifié de code échec):
package com.domain {
public class SomeClass {
private static var helper:Helper = new Helper();
}
}
class Helper {
}
Il compile, mais jette sur le premier accès de SomeClass
:
TypeError: Error #1007: Instantiation attempted on a non-constructor.
at com.domain::SomeClass$cinit()
...
OriginalL'auteur Blanka | 2012-06-13
Vous devez vous connecter pour publier un commentaire.
+1 à Darren. Une autre option est de déplacer le
Helper
classe en haut du fichierC'est assez cool, moi aussi, je n'avais aucune idée que vous pourriez faire cela. Cela dit, pour mon cas d'utilisation spécifiques, je ne pense pas que ce travail (je suis encore à tester tbh)... le compilateur Flex faut vraiment analyser l'ensemble du dossier, avant de compiler quoi que ce soit
Syntax error: package is unexpected.
OriginalL'auteur BlueRaja - Danny Pflughoeft
La non-constructeur d'erreur est le compilateur de façon maladroite de dire: "vous avez appelé un constructeur pour une classe, je n'ai pas encore vu"; si elle était un peu plus intelligent, il a pu vérifier le fichier (unité de compilation) pour les classes internes avant de se plaindre... mehhh
De voir que vous avez donné votre variable statique
private
d'accès, de toute évidence vous avez l'intention d'utiliser seulement de l'instance interne àSomeClass
(hypothèse peut être passé qu'une valeur de retour).La solution suivante reporte la création de la statique du var à l'intérieur de la classe est initialisée c'est à dire (sans doute implicite)
Helper.cinit()
est invoquée, plutôt que deSomeClass.cinit()
quandHelper
n'existe pas encore:OriginalL'auteur Darren Bishop
Je pense que ça ne peut pas fonctionner avec d'accompagnateur et de SomeClass à la fois dans le même fichier.
Lorsque SomeClass est initialisé, la classe Helper n'a pas été initialisé encore, et donc un objet d'assistance ne peut pas être créé.
Le déplacement de l'aide pour un fichier séparé devrait résoudre le problème.
En fait, ils sont censés être dans le même fichier. @silyevsk, je pense que c'est effectivement un ordre d'initialisation question.
a pour être dans le même fichier, c'est une façon de créer un constructeur privé dans Actionscript
OriginalL'auteur silyevsk
vous avez besoin de générer un constructeur et déclarer votre variable dans la classe, et non de la fonction:
SomeClass
avant que le membre statiquehelper
est disponible. Aussi, un peu bizarre pour initialiser un membre statique dans une instance constructeur. E. g., si vous créez plusieurs instances deSomeClass
, le membre statique sera remise à zéro à chaque fois... Pas ce que vous voulez. Un autre exemple, si vous avez une méthode statique à l'aide dehelper
, elle trouvera êtrenull
jusqu'à, vous instanciezSomeClass
au moins une fois. Bizarre, pour dire le moins.vous ne devez pas instancier à l'intérieur de la constuctor. Afin de ne pas écraser à chaque fois que vous l'instance SomeClass.
Mais lorsque vous instanciez nouveau Helper() vous appelez le constructeur de la classe Helper et c'est là que l'erreur se produit. Helper n'a pas de constructeur?
comme l'écrit, à votre exemple sera la cause d'une nouvelle aide à être créé sur chaque nouvelle instance de SomeClass, qui n'est sûrement pas le choix, avec une variable statique.
D'accord avec @Blanka, c'est très bizarre et un véritable anti-modèle, mais la raison pourquoi le compilateur aime c'est parce qu'il a eu la chance d'initialiser
Helper
avant son constructeur est appelé. @Wolv3r, AS3 soutient la définition implicite et l'invocation de non-arg constructeursOriginalL'auteur WolvDev