J'ai codé
et le compilateur me refuse le pointCode:static final IState INVOKE.toString() = "un";
Version imprimable
J'ai codé
et le compilateur me refuse le pointCode:static final IState INVOKE.toString() = "un";
Mais tu veux faire quoi avec ton IState ? il vient de quel package ? Android ?
En plus ton affectation est une abomination car tu mets à gauche du symbole "=" l'invocation d'une méthode ..... ca n'a pas de sens
Et je ne connais pas l'objet INVOKE ????????
IState est un objet qui représente un état sur un modèle
INVOKE est une constante qui dit qu'on doit se raccorder à cet état
toString() est une méthode qui dit que on doit prendre la chaîne comme non de l'état
pour mieux parler de ce problème, je met du code:
Code:
1
2
3 static final IState INVOKE.toString() = "un"; private static final IDiagramFactory FACTORY = IDiagramFactory.eINSTANCE; private static ArrayList<String> listUniversSousChaine = null;
oui maisn'est pas un nom de variableCode:INVOKE.toString()
et IState appartient a quel package ? pareil pour INVOKE ????
com.all4tec.matelo.datamodel.diagram.IState
A representation of the model object ' State'.
The following features are supported:
Incoming Transitions
Outgoing Transitions
ok mais INVOKE.toString() n'est pas une variable, donc ca bug point barre
et ou on trouve le code source ou la doc de matelo ?
je suis pas officier de marine moi :D
Salut,
N'a effectivement aucun sens en Java : c'est un mélange abscons entre 3 choses incompatibles :Code:static final IState INVOKE.toString() = "un";
- static final IState est la déclaration d'une variable static final (habituellement appelée constante) de type IState.
Déjà, lorsqu'on déclare une variable, on lui donne obligatoirement un nom, et ce nom ne peut être en aucun cas un statement (expression Java, telle qu'un appel de méthode dans ton cas), et pas plus un litéral (de type String dans ton cas ("un")), encore moins un mélange des deux ;
static final IState MACONSTANTE; où MACONSTANTE est le nom de la variable.
Ensuite il faut absolument lui donner une valeur, de type compatible (donc IState), vu qu'elle est déclarée final. On n'est pas obligé de lui donner une valeur directement dans la déclaration comme ça :
static final IState MACONSTANTE = IState.INVOKE;On peut lui donner une valeur dans un bloc static.- INVOKE.toString() est l'appel d'une méthode sur ce qu'il semble être valeur d'enum. Le seul cas où l'on peut omettre le nom de l'enum, c'est dans un switch. Dans tous les autres cas, il faudra mettre le nom de l'enum : IState.INVOKE.toString()
- = "un" : une affectation. En aucun cas, on ne peut affecter à un appel de méthode une valeur, constante, litérale ou autre (résultat d'un appel de méthode sur une instance d'objet). Un appel de méthode retourne soit une valeur (typée), soit rien. Jamais quelque chose auquel on pourrait affecter une valeur (comme une variable par exemple).
Le mélange de ces trois expressions totalement incompatibles ne permet pas de déduire ce que tu cherches à faire au juste.
- Une déclaration de constante de type IState : static final IState MACONSTANTE = IState.INVOKE;
- Une déclaration de constante de type String avec un litéral de type String : static final String MACONSTANTE = "un";
- Une déclaration de constante de type String dont la valeur est le nom d'une valeur d'enum : static final String MACONSTANTE = IState.INVOKE.name(); ou, à la rigueur, static final String MACONSTANTE = IState.INVOKE.toString();
- ... ?
J'ai besoin de déclarer une constante et de l'initialiser par autre chose que null
la constante doit être de type IState
la valeur peut être soit 1 soit "un"
Si la constante est de type IState, sa valeur ne peut être que du type IState (ou d'une classe qui étendrait IState, le cas échéant). 1 est un int, donc certainement pas un IState et "un" est un String, donc certainement pas un IState.
Comment s'en sortir?
Mais qu'est ce que tu cherches à faire au juste, en français, avec tes mots à toi. Parce qu'il n'y a pas à tortiller : en Java, tu ne mettras jamais 1 ou "un" dans une variable de type IState, quoique peut être la définition de cette classe.
J'ai coupé l'instruction en deux;
La Déclaration:
et l'initialisation:Code:static final IState INVOKE = null;
Code:INVOKE.setName("un");
Ok, tu dois déclarer une constante de type IState qui s'appelle INVOKE et qui a des propriétés particulières (en l’occurrence une propriété name qui vaudrait "un").
Déjà, faire, d'une part :
et d'autreCode:static final IState INVOKE = null;
te causera évidemment une NullPointerException, puisque INVOKE est null. Je ne sais pas pourquoi tu n'expliques pas ce que tu cherches à faire au lieu d'essayer de taper n'importe quoi dans l'espoir que ça fonctionne et que ça résolve ton problème:roll:Code:INVOKE.setName("un");
Déjà, première question : y-a-t'il pas moyen de passer la valeur de cette propriété en argument du constructeur ? Genre :
Ensuite, habituellement, par convention, une classe qui s'appelle Ixxx est une interface. N'est-ce pas le cas, ou est-ce une classe ? Si ce n'est pas une classe, tu ne pourras évidemment pas l'instancier en faisant new IState()...Code:static final IState INVOKE = new IState("un");
Tu peux faire comme ça :
Code:
1
2
3
4
5
6
7
8
9
10
11 public class LaClasseJeSaisPasQuoi { static final IState INVOKE; // bloc statique d'initialisation static { INVOKE = new IState(); // en supposant que le constructeur n'a pas d'argument INVOKE.setName("un"); } }