Je programme java professionnellement depuis plus de dix ans. C'est l'un des bogues les plus bizarres que j'ai jamais essayé de retrouver. J'ai un membre privé, je l'initialise et ensuite il change à null tout seul.Comment mon membre privé se met-il à zéro?
public class MyObject extends MyParent
{
private SomeOtherClass member = null;
public MyObject()
{
super();
}
public void callbackFromParentInit()
{
member = new SomeOtherClass();
System.out.println("proof member initialized: " + member);
}
public SomeOtherClass getMember()
{
System.out.println("in getMember: " + member);
return member;
}
}
Sortie:
proof member initialized: [email protected]
in getMember: null
Si vous exécutez ce code, évidemment, il fonctionne correctement. Dans mon code actuel, il n'y a que ces trois occurrences (cinq si vous comptez les printlns) dans ce modèle exact.
Ai-je rencontré un bug dans la JVM? Sauf erreur de ma part, la classe parent ne peut pas interférer avec un membre privé, et peu importe ce que je mets entre les lignes de code que je vous ai montrées, je ne peux pas changer la valeur de membre sans utiliser l'identificateur ".
Avez-vous un exemple de travail complet? – Sundae
Quelle est la sortie de: MyObject foo = new MyObject(); foo.callbackFromParentInit(); foo.getMember(); – davidbuzatto
Je ne peux pas poster de code de travail. Je peux vous dire que l'identifiant "member" est utilisé seulement cinq fois dans le code dans le motif comme indiqué. Il ne devrait pas être possible de changer en null sans que l'identifiant soit utilisé à l'intérieur de cette classe sur une autre ligne. –