Attribute einer HttpSession / unchecked cast

Status
Nicht offen für weitere Antworten.

Sergeant_Pepper

Bekanntes Mitglied
Hallo,

einem HttpSession-Objekt kann ich beliebige Attribute zuordnen.
Z.B.
Code:
List<String> warnungen=new LinkedList<String>();
session.setAttribut("warnungen", warnungen);

Späteres Auslesen des Attributs:
Code:
List<String> warnungen=(List<String>)session.getAttribute("warnungen");

Dabei erhalte ich die Warnung: "Type safety: Unchecked cast from Object to List<String>"

Wie kann ich das vermeiden, abgesehen von @SuppressWarnings("unchecked") ?
 
Zuletzt bearbeitet:
S

SlaterB

Gast
falls es dir nur um den technischen Aufwand geht, hilft eine generische Hilfsmethode, entweder statisch oder in einer Subklasse/ Ersatzklasse für Session:

@SuppressWarnings("unchecked")
public static <T> T getAttribute(Session, String) {
return (T) session.getAttribute(string)
}


schon sind alle Aufrufe
List<String> warnungen= getAttribute(session, "warnungen");
warn-frei,

allerdings wird damit alles ganz schön unterhöhlt, zu ClassCastExceptions kann es immer noch kommen,
wenn man das SuppressWarnings im Code stehen hat, wird man wenigstens noch ein bisschen drauf aufmerksam gemacht,
übrigens ginge dann

@SuppressWarnings("unchecked")
List<String> warnungen=(List)session.getAttribute("warnungen");
statt
@SuppressWarnings("unchecked")
List<String> warnungen=(List<String>)session.getAttribute("warnungen");

man muss/ kann nie generisch casten
 
Zuletzt bearbeitet von einem Moderator:

Sergeant_Pepper

Bekanntes Mitglied
generische Hilfsmethode, entweder statisch oder in einer Subklasse/ Ersatzklasse für Session:
Ich habe die Methode
Java:
@SuppressWarnings("unchecked")
private static <T> getAtt(HttpSession session, String att);
    {
        return (T) session.getAttribute(att);
    }
in meinen Servlet-Code eingebaut, das klappt. Dadurch wirkt SuppressWarnings nur auf einen kleinen Abschnitt.

Danke :)

allerdings wird damit alles ganz schön unterhöhlt, zu ClassCastExceptions kann es immer noch kommen,
wenn man das SuppressWarnings im Code stehen hat, wird man wenigstens noch ein bisschen drauf aufmerksam gemacht

äh... wenn SuppressWarnings im Code steht, werde ich doch gerade nicht informiert?
 
S

SlaterB

Gast
beim Code lesen/ später verändern/ Fehler suchen bemerkt man das SuppressWarnings hoffentlich und zieht daraus seine Schlüsse,
mit der Hilfsmethode nicht mehr/ weniger, man muss schon separat die Information im Gedächtnis haben, dass getAtt() entsprechendes tut,

kein echtes Problem, nur der Vollständigkeit halber drauf hingewiesen, bevor jemand meckert ;)
 

wolfgke

Mitglied
Mein Vorschlag:

Java:
Object warnungen=session.getAttribute("warnungen");

if (warnungen instanceof List<String>) {
   return (List<String>) warnungen;
} else {
   return null; // Oder Exception werfen
}
 
S

SlaterB

Gast
wie gesagt: Casts und instanceof funktionieren nicht mit Generics,
kann man sich im Code sparen und eine Warning vom Compiler eh nicht verhindern
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
6 JSF Form Attribute nicht an Bean übergeben Web Tier 2
T Spring HTML Tabellen sortieren, filtern, Attribute ausblenden Web Tier 3
H JSF Fehler bei Zugriff auf f:attribute Web Tier 2
5 Servlet Error - cvc-complex-type.4: Attribute 'version' must appear on element 'web-app'. Web Tier 2
M JSF Attribute von Komponenten aus ManagedBeans ändern? Web Tier 4
N Double Attribute in ManangedBean 0.0 Web Tier 6
MrWhite Facelets: Dynamische Attribute Web Tier 3
S Attribute in Objektliste nach gecheckten Checkboxen setzen Web Tier 4
M In einer HTML Tabelle positionieren Web Tier 4
I Daten einer Datenbank in ein Formular einfügen Web Tier 3
N RequestDispatcher: include-Aufruf einer jsp scheitert nach mehreren forward-Aufrufen Web Tier 1
Shams Problem mit der verwirklichung einer Readmethode in einer Chatapplikation Web Tier 3
F JSF Popup mit einer Checkbox Auswahlliste Web Tier 1
S Rendern einer Komponente nach actionListener Web Tier 2
A Aufruf eines Servlets auf einer JSP Seite funktioniert nicht Web Tier 10
M JSF JSP, Facelets und einbinden einer js-Datei Web Tier 2
J JSF Initialisierung einer ApplicationScoped Bean Web Tier 2
J Anzeige einer Hierarchie Web Tier 5
M Exception beim Erstellen einer Query Web Tier 9
N JSF Architektur/Design einer JEE 6 + JSF 2.x Webanwendung mit Subdomänen Web Tier 4
J Performance einer Webanwendung Web Tier 2
V JSF Rendering abhängig von einer Auswahl Web Tier 8
P JSF Merkwürdiges Verhalten einer Bean Web Tier 11
S Auswahl eine Zeile von einer HTML Tabelle im Servlet Web Tier 4
X JSP Auslesen der Daten einer Session Web Tier 3
J Servlet Manuelles Rendern einer JSF Datei Web Tier 4
1 JSP Mit Daten einer c:forEach Rechnen ? Web Tier 4
H Seiten-reload als Result einer Action Web Tier 3
N Wie mache ich in einer xhtml (JSF) einen redirect? Web Tier 3
F Prinzipielle Architektur einer Web-Anwendung Web Tier 4
A [JSF 2.0] Ausgabe aus Schleife bzw. einer ArrayList Web Tier 9
E Servlet zum speichern einer Datei in einer Datenbank Web Tier 3
K Analye einer Seite (Java, JSP, ...) Web Tier 12
I Automatische Weiterleitung JSF mit Aufruf einer Methode Web Tier 2
O Focus auf Textfeld, in letzter Reihe einer dataTable Web Tier 2
M Frage zur Konfiguration einer RichFaces DataTable Web Tier 4
I Eine Bean von einer anderen Bean aufrufen Web Tier 2
C PanelGrid aus einer Liste Web Tier 3
J JSF: Initialisieren einer Property mit Wert? Web Tier 5
P Struts2 - Mehrere Methoden/Actions in einer Klasse + Validation Web Tier 2
Schandro JSP soll dynamische Anzahl an Parametern einer JavaScript-Function erzeugen Web Tier 8
N Architektur einer Such-Webanwendung Web Tier 4
E Methode einer Bean aus anderer Bean aufrufen Web Tier 10
F Redirect nach Aufruf einer JSP Web Tier 5
O struts - Gültigkeit einer Action an Session binden?! Web Tier 4
C navigation auf einer jsp Seite Web Tier 3
pusteblume Mehrere Objekte einer Bean Web Tier 10
D JSF+Weiterleitung zu einer Login-Page Web Tier 1
F Darstellung einer Tabelle mit JSP Web Tier 4
F Beim Aufruf von einer JSF Seite eine Methode ausführen Web Tier 9
P aktuelle HttpSession ermitteln Web Tier 3

Ähnliche Java Themen

Neue Themen


Oben