Quelle est la différence entre "nouveau A ()" et "A.newInstance ()"?

Quand dois-je préférer l'un sur l'autre? Quel est le but de la méthode ci-dessous?

class A { public static A newInstance() { A a = new A(); return a ; } } 

Quelqu'un peut-il m'expliquer les différences entre ces deux appels?

  • Comment puis-je télécharger des images à partir de la console de développement Google Play
  • System.out.println in android test
  • Erreur lors de la mise en page de FloatingActionButton: NoSuchMethodException
  • Spreadtrum (ID du fournisseur 1782) Problèmes Se connecter à adb
  • Slider Menu des deux côtés (droite et gauche) en une seule activité
  • Comment exécuter le nouveau Chrome pour Android 4 sur Android Emulator?
  • Manifeste de fusion échoué: uses-sdk: minSdkVersion 8 ne peut pas être plus petit
  • Comment référencé android: valeurs de gravité dans un fichier de ressources?
  • Comment puis-je exécuter un service sur un thread distinct?
  • Comment utiliser le pourcentage pour la mise en page Android?
  • Comment puis-je attraper SIGSEGV (défaut de segmentation) et obtenir une trace de pile sous JNI sur Android?
  • Le bouton du menu Android ne s'affiche pas
  • 3 Solutions collect form web for “Quelle est la différence entre "nouveau A ()" et "A.newInstance ()"?”

    newInstance() est souvent utilisé comme un moyen d'instancier un objet sans appeler directement le constructeur par défaut de l'objet. Par exemple, il est souvent utilisé pour implémenter un modèle de conception Singleton:

     public class Singleton { private static final Singleton instance = null; // make the class private to prevent direct instantiation. // this forces clients to call newInstance(), which will // ensure the class' Singleton property. private Singleton() { } public static Singleton newInstance() { // if instance is null, then instantiate the object by calling // the default constructor (this is ok since we are calling it from // within the class) if (instance == null) { instance = new Singleton(); } return instance; } } 

    Dans ce cas, le programmeur oblige le client à appeler newInstance() pour récupérer une instance de la classe. Ceci est important car simplement fournir un constructeur par défaut permettrait au client d'accéder à plusieurs instances de la classe (ce qui va à l'encontre de la propriété Singleton).

    Dans le cas de Fragment s, fournir une méthode d'usine statique newInstance() est une bonne pratique car nous voulons souvent ajouter des arguments d'initialisation à l'objet nouvellement instancier. Plutôt que de demander au client d'appeler le constructeur par défaut et de configurer manuellement les arguments de fragments eux-mêmes, nous pouvons fournir une méthode newInstance() qui fait cela pour eux. Par exemple,

     public static MyFragment newInstance(int index) { MyFragment f = new MyFragment(); Bundle args = new Bundle(); args.putInt("index", index); f.setArguments(args); return f; } 

    Dans l'ensemble, alors que la différence entre les deux est principalement une question de conception, cette différence est vraiment importante car elle offre un autre niveau d'abstraction et rend le code beaucoup plus facile à comprendre.

    Dans vos exemples, ils sont équivalents et il n'y a pas de raison réelle de choisir l'un sur l'autre. Cependant, l'utilisation de newInstance est couramment utilisée pour effectuer une certaine initialisation avant de renvoyer une instance de la classe. Si chaque fois que vous demandez une nouvelle instance de la classe en appelant son constructeur, vous finissez par configurer un tas de variables d'instance avant de pouvoir utiliser l'objet, il serait plus logique d'avoir la méthode newInstance qui effectue cette initialisation et vous retourne Un objet prêt à l'emploi.

    Par exemple, Activity s et Fragment s ne sont pas initialisés dans leurs constructeurs. Au lieu de cela, ils sont généralement initialisés pendant onCreate. Par conséquent, il est courant que la méthode newInstance accepte tous les paramètres que l'objet devra utiliser pendant l'initialisation et les stocke dans un Bundle que l'objet peut lire plus tard. Un exemple de ceci peut être vu ici:

    Exemple de classe avec la méthode newInstance

    new() est un mot-clé utilisé pour créer un objet et il peut être utilisé pendant que nous connaissons le nom de la classe
    new instance () Une méthode utilisée pour créer un objet et elle peut être utilisée lorsque nous ne connaissons pas le nom de classe

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.