Sie kann nicht sollte nicht (*) dies in einer einzigen Methode tun. Item[]
und List<Item>
sind nicht verwandte Typen.
sollten Sie zu einem der Überlastung des anderen rufen: entweder something(Item... items)
Anrufe something(List<Item>)
oder something(List<Item>)
Anrufe something(Item... items)
.
Von den beiden Optionen ist es besser, für das Array die Liste Überlastung zu nennen Überlastung:
public void something(Item... items) {
something(Arrays.asList(item));
}
Das ist billig, weil es nicht das Array kopiert, sondern wickelt es: die Schaffung der List
ist O(1)
.
Wenn Sie waren die Array-Überlastung aus der Liste Überlastung aufzurufen:
public void something(List<Item> items) {
something(items.toArray(new Item[0]));
}
Diese teurer sein würde, da der toArray
Aufruf erstellen hat und ein Array zu füllen: es ist ein O(n)
Betrieb, wo n
ist die Größe der Liste. Es hat jedoch den leichten Vorteil, dass something
den Inhalt von List
nicht ersetzen kann, da alle Aktualisierungen des Arrays nach der Ausführung einfach verworfen werden.
(*) Sie können , aber es wäre wirklich gross sein, und nicht typsicher, wie Sie einen Object
Parameter akzeptieren müssten, da es keine anderen gemeinsamen Supertyp List<Item>
ist und Item[]
; und du würdest immer noch die Schleifen für die zwei Typen wiederholen müssen; und Sie müssten mit der Möglichkeit umgehen, dass ein völlig unzusammenhängender Typ (zur Laufzeit) übergeben wird:
public void something(Object obj) {
if (obj instanceof List) {
for (Object element : (List<?>) obj) {
Item item = (Item) element; // Potential ClassCastException.
doStuff();
}
} else if (obj instanceof Item[]) {
for (Item item : (Item[]) obj) {
doStuff();
}
} else {
throw new IllegalArgumentException();
}
}
Was für ein Durcheinander. Danke dem Hersteller für Überladungen.
ich würde es vorziehen, 'for-each' nicht für' List' zu verwenden, es funktioniert nicht –
@Mohsen_Fatemi Wie funktioniert ein 'for-each' nicht auf' List' Objekten? –
Uhh, warum sollte es nicht funktionieren? Der Code, den ich hier bekommen habe, funktioniert gut, er ist einfach nicht gut umstrukturiert. – Selbi