het declareren van ArrayList in java Constructor

Ik ben met een project bezig, en ik leerde voor het concretiseren van variabelen in constructeurs. Ik heb wat moeite doen dit met een ArrayList dacht. Kunt u raden wat de beste praktijken, heb ik nodig voor het definiëren van de ArrayList met de aanleg variabelen of kan ik dat doen in de constructor. Bedankt voor uw suggesties! Ik heb een voorbeeld van wat ik het over heb hieronder:

//imports
import java.util.*;
import java.lang.*;

public class ArrayListConstructorDemo
{
//instance variables/attributes

String string;
List<String> list;//for example does this line need to say List<String> list = new ArrayList<String>();

//constructors
public ArrayListConstructorDemo()
{
    String string = "null";
    List<String> list = new ArrayList<String>();//is there anyway I can do this here instead of 6 lines up?
}//end default constructor
public ArrayListConstructorDemo(String string,List<String> list)
{
    this.string = string;
    this.list = list;
}//end generic constructor

//observers/getters/accessors
 public String getString(){return string;}//end method getString()
 public List<String> getList(){return list;}//end method getList()

//transformers/setters/mutators
     public void setTable(String string){this.string = string;}
     public void setValues(String list)
     {

    // for(String s : test) 
    // {
            list.add(this.list);
    // }
     }
public String toString()
{
    return "this is a generic toString method for the class ArrayListConstructorDemo";
}//end toString

public static void main(String[] args)  
{
    ArrayListConstructorDemo alcd = new ArrayListConstructorDemo();
    System.out.println(alcd.list.size());

//test Lists in general
    List<String> bleh = new ArrayList<String>();
    bleh.add("b1");
    System.out.println(bleh.get(0));
}//end method main()
}//end class ArrayListConstructorDemo
  • Niet te verwarren declaratie en initialisatie. Ook oppassen dat je niet in de schaduw van de variabele. (Dat zijn alle trefwoorden.)
  • Waarom zijn jullie weer bij het declareren van de variabelen in de constructor?
  • Sotiros ik deed dat voor brevities sake. Je hebt helemaal gelijk en in de praktijk heb ik niet! Rohit dat leerde ik in een standaard constructor iets dat moet een waarde hebben om te worden benaderd later moet worden gemaakt in de default constructor in plaats van het toevoegen van standaard waarden voor dat, zo voorkomt u latere problemen met willekeurige waarden rond te zweven.
  • Rohit is een verwijzing naar een concept genaamd schaduw. Als u een veld hebt verklaard met de naam list en vervolgens declareren van een nieuwe variabele genaamd list binnen de constructor, wanneer het gaat om list binnen de constructor, zult u worden verwezen naar de lokale variabele in plaats van op het veld.
InformationsquelleAutor demuro1 | 2014-03-29



6 Replies
  1. 5

    Wijzigen

    List<String> list = new ArrayList<String>();

    te

    list = new ArrayList<String>();
    • heb het, dat voelt als wat mijn probleem is. Het veranderen van mijn code, zoals u suggereerde mijn probleem opgelost. Heel erg bedankt voor uw hulp!
  2. 2

    Als u wilt om het te verklaren in de constructor, dan moet je (waarschijnlijk) wilt verklaren de buitenste veld, zo u wilt:

    list = new ArrayList<String>();

    Momenteel zijn schaduw de List<String> list klasse variabele, wat betekent dat u een nieuwe aanleg van list, in plaats van dat u het initialiseren van de list instance variabele.

    Ik persoonlijk de voorkeur aan het initialiseren van het op aangifte tijd al, dus wat je voorheen had. Ik heb liever dit om de code compacter en je de meeste kans won uiteindelijk niet te vergeten om deze te initialiseren als u leren om zelf die gewoonte.

  3. 2

    In het algemeen de praktijk is te verklaren voor de constructor, en initialiseren in de constructor.
    Hier is een voorbeeld:


    class myClass
    ArrayList<String> strings
    public myClass()
    {
    strings=new ArrayList<String>();
    }

  4. 2

    Als u wilt gewoon verkondigt in de constructor kunt u de code:

         ArrayList<String> name = new ArrayList<String>();

    Anders kun je het verklaren als een veld, en dan het initialiseren in de constructor.

       private ArrayList<String> name;

    En vervolgens in de constructor:

        name = new ArrayList<String>();

    Waardoor het een veld zou handig zijn, aangezien je dan te maken accessor/mutator methoden in de aangegeven volgorde op te halen en gebruik maken van de Lijst van de verschillende klassen, zonder dat verklaart het publiek (dat is zelden een goed ding).

  5. 1

    Hoe kunt u dit doen ??

    public void setValues(String list) {
    
        //for(String s : test)
        //{
        list.add(this.list);
        //}
    }

    Er is geen methode, zoals add() om Strings te manipuleren, in Plaats daarvan zou je dit hebt gedaan :

    public void setValues(List<String> list) {
    
        //for(String s : test)
        //{
        list.add(this.list);
        //}
    }

    En met betrekking tot het declareren van ArrayList in het constructeurs u kunt dit doen als dit :

    String string;
    List<String> list;//for example does this line need to say List<String>
                        //list = new ArrayList<String>();
    
    //constructors
    public ArrayListConstructorDemo() {
        string = "null";
        list = new ArrayList<String>();//is there anyway I can do this here
                                        //instead of 6 lines up?
    }//end default constructor
    • Die methode nog niet klaar is, zal Het uiteindelijk iets als public void setValues(List<String> lijst String… strings) { for(String s : strings){ lijst.toevoegen(deze.s); } } of iets dergelijks
    • ya… dat klinkt ok nu !! en btw, gebruik van variabele-namen, zoals de vooraf gedefinieerde trefwoorden is een slechte gewoonte !

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *