Können Java-Methoden zurückgeben Typ Enum?
Ich könnte falsch sein, aber ich vermute, aus Warum kann nicht Enumerationen deklariert werden, lokal in einer Methode?
dass da ein enum in Java können nicht lokal deklariert werden, daher ist es problematisch, für eine Methode zum zurückgeben Typ Enum? Ich kann erklären, dass eine Methode zurückgeben soll ein Enum (siehe unten), aber wie würde man dann gehen, über die Implementierung einer solchen Methode, um zurückzukehren, alles andere als null oder eine Referenz auf ein Enum deklariert, die außerhalb der Methode? Meine erste Neigung wäre zu untersuchen, die Verwendung von Generika für diese, aber ich möchte vermeiden deadends, wenn der SO-community kann mir helfen, Sie zu vermeiden.
private Enum resources() {
return null;
}
- Möchtest du wieder eine
Enum
geben, oder eineEnum
Wert? - Ich bin mir nicht sicher, der Titel der Frage ist, die am besten geeignet ist. Was tun Sie eigentlich tun wollen?
- Sorry für die Verwirrung, und ich könnte sicherlich falsch sein, was ich versuche zu erreichen (mein denken beginnt, gehen schief in den späten Nachmittag), aber ich dachte, ich könnte vielleicht wie eine Methode zurück, eine generische Enum nicht Mitglied von Enum.
- Können Sie das nicht tun, aber Sie können zurückkehren, alle Werte der enum.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, du hast Recht, es geht nur um die Möglichkeit zu haben, zurück
null
oder eineEnum
deklariert woanders. Aber Sie müssen nicht unbedingt haben, um anzugeben, dass "etwas anderes" zur compile-Zeit.Später wird, rufen Sie es durch die Spezialisierung der generischen Konstruktor und übergeben Sie in der enum-Klasse, die Sie interessiert:
(Das ist natürlich ein erfundenes Beispiel und im wirklichen Leben sollte man einfach Aufruf von Foo.Werte(), aber Sie bekommen die Idee.)
values = enumClass.getEnumConstants()
Den gesamten Punkt des Weges Java funktioniert Enums ist, dass Sie typesafe--, so dass Sie würde nicht wieder ein Enum (das wäre doppelt-plus ungood) stattdessen kehren Sie die tatsächlichen Typ, den Sie definieren (wie "Anzug"), die verhält sich genau wie eine Klasse. Anzug hat 4 "Aufgezählt" Instanzen.
Wenn Sie erwarten, wurden ein "Anzug", was würde es sein, wieder eine "Rangfolge" von 7? Es würden zu brechen alles!
Auch, wenn Sie übergeben ein "Enum" oder einige generische Wert, Sie konnte nicht rufen Methoden auf. Die kühlste Sache über TypeSafe Enums ist, dass man einfach nur ein "Anzug", und nennen Sie "Farbe.getColor()" und voll erwarten, um die Farbe der Anzug. Sie könnten auch ein ranksHigherThan(Anzug s), die erfüllen könnte:
Oder, noch wichtiger:
(vorausgesetzt, Sie wurden beide übergeben, und Sie wissen nicht, was Sie sind)
Art Sicherheit ist wirklich erstaunlich (obwohl es fühlt sich ein wenig unangenehm auf den ersten), zu umarmen.
Alle enums implementieren das interface, Enum, so können Sie sicher schreiben Sie eine Methode, die zurückgibt, der eine enum-auf diese Weise. Aber diese Methode gibt eine einzelne enum-Wert. Es gibt keinen Weg zurück ein generischer Wert, der umfasst die ganze enum (abgesehen von der Rückkehr der Klasse und das tun der Reflexion). Sie können jedoch wieder alle enum-Werte, die mehr oder weniger was Sie wollen, denke ich.
Ein Vorteil dieses Ansatzes ist, können Sie die Rückgabe auch mehr oder weniger Werte für Beispiel:
Einen noch besseren Ansatz, der mehr typesafe ist, um die enums von Interesse
Implementierung eines common-interface-z.B.
Können Sie zusätzliche Methoden, um die Schnittstelle für die Bereitstellung von mehr Funktionalität.
Was sind Sie versuchen zu erreichen? Dies ist ein Weg, um wieder ein
Enum
:Aber, ich vermute, das ist nicht das, was Sie für gehen?
Enum<?>
.Ja, es ist definitiv möglich.
Wenn Ihre Frage über deklarieren Enums, können Sie erklären:
class
;class
;Nicht ganz sicher, was dein Ziel ist, aber wenn Sie wollte, um wieder ein generified-Methode (d.h. eine, die überschrieben werden), haben Sie vielleicht so etwas wie die folgenden:
Nicht ganz sicher, was Sie gewinnen würden, da, obwohl es von Vorteil sein kann, wenn man darüber spricht verschiedene Sätze von Enums und deren Elemente.
Wenn Sie sprechen über die Enum-Klasse (also die percursor zu Iterator) soweit ich weiß, es wurde nicht generified, so bin ich nicht sicher, Generika würde viel helfen.
Können Sie beziehen sich auf den Wert eines enum, die durch seinen Namen, z.B. Farbe.PIK.
Können Sie iterieren über alle Werte mit den Werten () - Methode und wählen Sie einen der Werte.