Étant donné l'exemple de code ci-dessous, existe-t-il un moyen d'initialiser total
de sorte que je ne doive pas effectuer une vérification de la nullité plus tard lorsque je l'utilise. Je ne suis pas en mesure de passer la valeur dans le constructeur.
public class SampleCode
{
private WeakReference<Float> total;
public SampleCode() {
}
public void setWidget(Float total) {
this.total = new WeakReference<>(total);
}
public float calculatePercentage(Float count) {
if (total == null) {
return -1;
}
if (total.get() == null) {
return -1;
}
return count / total.get();
}
}
Je voudrais faire quelque chose comme ça dans le constructeur :
this.total = new WeakReference<>(null);
Mais cela ne fonctionne pas. Puis-je initialiser une WeakReference dans un état libéré ou cela va-t-il à l'encontre de l'objectif des classes ?
Gracias
Editar
Merci pour tous les commentaires.
- L'utilisation de float était destinée à simplifier la question mais je peux tout à fait comprendre la confusion. L'objet réellement détenu par la référence faible est une vue dans un layout Android et cette classe vit en dehors du cycle de vie des activités.
- total.get() doit être assigné à une valeur locale avant d'être évalué.
- La déclaration "Cela ne fonctionne pas" était en relation avec :
total.get() == null
évaluant à false après avoir initialisé avec this.total = new WeakReference<>(null);
Je comprends maintenant que cette déclaration est incorrecte. L'évaluation sera vraie. Cependant, je pense qu'il serait préférable de ne pas l'initialiser à null et de vérifier la condition de nullité avant l'accès.