Java Final arraylist
Ma question est concernant la déclaration d'une liste de tableaux comme définitive. Je sais qu'une fois que j'écris final ArrayList list = new ArrayList();
je peux ajouter, supprimer des objets à partir de cette liste, mais je ne peux pas list = new ArrayList()
ou list = list1
. Mais quelle sera l'utilisation de déclarer arraylist comme
Private static final ArrayList list = new ArrayList();
. Et en dehors de la différence, je l'ai mentionné ci-dessus quelle sera la différence entre les deux suivantes de la déclaration:
1. ArrayList list = new ArrayList()
2. private static final ArrayList list = new ArrayList();
Il semble que vous êtes visant à obtenir des précisions sur la différence entre une variable d'instance et une variable statique. Si ce n'est pas le cas, veuillez préciser plus.
OriginalL'auteur user553198 | 2010-12-24
Vous devez vous connecter pour publier un commentaire.
Vous êtes en droit de déclarer la
list
final signifie que vous ne pouvez pas réaffecter leslist
variable à un autre objet.L'autre question (je pense) a été
vs
prenons chaque modificateur à son tour.
private
Signifie seulement cette classe (SomeClass
) peut accéder àlist
static
Signifie qu'il n'existe qu'une seule instance de lalist
variable pour toutes les instances deSomeClass
à partager. La liste de l'instance est associée à la SomeClass une classe plutôt qu'à chaque nouvelle SomeClass instance. Si une variable est non statique il est dit être une variable d'instancefinal
comme vous le savez, vous ne pouvez pas réaffecter la liste variable d'une autre valeur.Dans la deuxième déclaration il n'y a pas de modificateurs, de sorte que la variable est une variable d'instance, et il permet aussi de colis-privé de la protection d'accès (Parfois appelé par défaut de la protection d'accès). Cela signifie que cette classe (
SomeClass
) et d'autres classes du même package peut accéder à la variable.Vous pouvez en savoir plus sur
public
,private
, etpackage-private
ici: Contrôle d'accèsVous pouvez en savoir plus sur
final
etstatic
ici: Variables de classeOriginalL'auteur daveb
Juste pour "apporter un peu d'eau à votre Moulin" vous permettra de comprendre l'intérêt de
final
lorsque vous aurez envie de faire votre liste publiquement disponible, mais inmodifiable.En java, on peut faire une liste inmodifiable avec Les Collections.unmodifiableList(modifiableList).
Ont maintenant un coup d'oeil au code suivant :
Bien, dans anyclass, n'importe où dans votre code, vous pouvez faire quelque chose comme ceci
Lorsque vous ajoutez le
final
mot-clé de votre variable, les deux premiers ne seront pas autorisésMais vous aurez toujours la possibilité de modifier le contenu de la liste :
Par l'ajout d'un Les Collections.unmodifiableList(modifiableList) à la fin de la statique bloc vous prévenir :
Ok, nous y sommes presque. Juste pour être sûr que vous obtenez l'ensemble de l'image permet de garder le Les Collections.unmodifiableList(modifiableList) mais permettez-moi de supprimer le dernier modificateur
Que pouvez-vous faire dans ce cas ?
...
...
Eh bien, vous pouvez faire ce que vous voulez comme dans le premier cas (étant donné que vous attribuez à la nouvelle liste de la première) :
OriginalL'auteur Cerber
Quand vous dites
cela signifie que la variable
list
pointe toujours à la mêmeArrayList
objet. Il y a deux situations dans lesquelles cela peut être utile.list
variable une fois qu'il a reçu de sa valeur. Cela permet de réduire la complexité et de l'aide dans la compréhension de la sémantique de votre classe/méthode. Dans ce cas, vous sont généralement mieux en utilisant de bonnes conventions de nommage et de réduction de la méthode de la longueur (la classe/méthode est déjà trop complexe pour être facilement comprise).final
dans un cadre englobant de sorte que vous pouvez accéder à l'intérieur de la classe. De cette façon, Java pouvez copier votrefinal
variable dans l'intérieur de la classe de l'objet (il ne changera jamais sa valeur) et l'intérieur de la classe de l'objet n'a pas besoin de s'inquiéter de ce qui se passe à l'extérieur de la classe de l'objet, tandis que l'intérieur de la classe de l'objet est vivant et doit accéder à la valeur de cette variable.La deuxième partie de votre question est à propos de la différence entre
et
La différence de cours sont les modificateurs.
private
signifie pas visibles de l'extérieur de la classe,static
signifie qu'elle est définie sur le niveau de la classe et n'a pas besoin d'une instance d'exister, etfinal
est discuté ci-dessus. Pas de modificateurs de moyens colis-privé ou d'accès par défaut.OriginalL'auteur eljenso
Vous dites "je peux ajouter, supprimer (et trouver) des objets", mais qui est je?
La différence entre vos deux cas, des préoccupations de qui code ces opérations sur la liste peut être appelé.
En général, vous devez tenir compte de la portée de la déclaration, vous augmentez considérablement la maintenabilité du code, si vous l'réduire la visibilité de vos variables. Si vous avez une classe:
Important que la valeur peut être modifiée par tout autre code, n'importe où ailleurs dans une application. Si au contraire vous rendre privé et de fournir un accesseur en lecture:
vous le savez maintenant, seule la classe elle-même peut changer la valeur pour les grandes applications massivement augmente la facilité de maintenance. Afin de déclarer la liste privée des limites de ce code peut voir et modifier le contenu de la liste.
L'utilisation de la statique à la liste partagée par toutes les instances de la classe, plutôt que chaque instance de l'obtention de son ovn copie.
OriginalL'auteur djna