“Instantiëren” een lijst in Java? [DUPLICEER]

Probeer de volgende code te gebruiken:

List<Integer> list = new List<Integer>();

Ik krijg het volgende foutbericht:

java.util.Listis abstract; kan niet worden geïnstantieerd

Wat betekent dit en waarom kan ik niet initialiseren Listop dezelfde manier als ik een ArrayList?


Antwoord 1, Autoriteit 100%

In Java, Listis een -interface . Dat wil zeggen, het kan niet direct worden geïnstantieerd.

In plaats daarvan kunt u ArrayListgebruiken, wat een implementatie is van die interface die een array gebruikt als backing-winkel (vandaar de naam).

Sinds ArrayListis een soort List, u kunt het eenvoudig upcasteren:

List<T> mylist = new ArrayList<T>();

Dit staat in contrast met .NET, waar, sinds versie 2.0, List<T>is de standaard implementatie van de IList<T>Interface.


Antwoord 2, Autoriteit 16%

Listis een interface, geen betonnen klasse.
Een interface is slechts een reeks functies die een klasse kan implementeren; Het is niet logisch om een ​​interface te instantiëren.

ArrayListis een betonnen klasse die toevallig deze interface en alle methoden erin implementeert.


Antwoord 3, Autoriteit 15%

Gebruik List<Integer> list = new ArrayList<Integer>();


Antwoord 4, Autoriteit 6%

Listis de interface, geen klasse, zodat het niet kan worden geïnstantieerd. ArrayListis hoogstwaarschijnlijk wat u zoekt:

ArrayList<Integer> list = new ArrayList<Integer>();

Een interface in Java definieert in wezen een blauwdruk voor de klasse – een klasse die een interface implementeert, moet implementaties bieden van de methoden die de lijst definieert. Maar de daadwerkelijke implementatie is volledig aan de implementatieklasse, in dit geval ArrayList.

De JDK biedt ook LinkedList– een alternatieve implementatie die weer voldoet aan de lijstinterface. Het werkt heel anders dan de ArrayListeronder en als zodanig is het meestal efficiënter bij het toevoegen/verwijderen van items halverwege de lijst, maar voor de overgrote meerderheid van de gebruiksgevallen is het minder efficiënt. En natuurlijk, als je je eigen implementatie wilt definiëren, is dat perfect mogelijk!

Kortom, je kunt geen lijst maken omdat het een interface is die geen concrete code bevat – dat is de taak van de klassen die die lijst implementeren, waarvan ArrayListverreweg het meest wordt gebruikt ( en met goede reden!)

Het is ook vermeldenswaard dat in C# een Listeen klasse is, geen interface – dat is IList. Hetzelfde principe is echter van toepassing, alleen met verschillende namen.


Antwoord 5, autoriteit 2%

Een Listbestaat niet echt in Java. Het is een interface, een manier om te definiëren hoe een object mag communiceren met andere objecten. Als zodanig kan het nooit worden geïnstantieerd. Een ArrayListis een implementatie van de List-interface, evenals een gekoppelde lijst, enzovoort. Gebruik die in plaats daarvan.


Antwoord 6, autoriteit 2%

A ListIN JAVA is een interface die bepaalde kwaliteiten definieert een “lijst” moet hebben. Specifieke lijstimplementaties, zoals ArrayListImplementeer deze interface en vlees uit hoe de verschillende methoden moeten werken. Wat probeer je te bereiken met deze lijst? Hoogstwaarschijnlijk zal een van de ingebouwde lijsten voor u werken.

Other episodes