Cast vermeiden

Mortal_Shadow

Aktives Mitglied
Hi,

ich stehe vor folgendem Problem.
Meiner Methode wird ein Objekt einer Basisklasse übergeben.
Je nach Subklasse, will ich es jedoch anders behandeln.
Momentan sieht mein Code dabei so aus:

Java:
if(info.getClass() == InfoPosChange.class){
			@SuppressWarnings("unused")
			InfoPosChange i = (InfoPosChange) info;
                                  //tu was mit i
		}
Wegen dem SupressWarnings gefällt mir das allerdings nicht so.
Geht das auch sauberer, oder muss ich das so lassen?

Danke im vorraus.
 

Noctarius

Top Contributor
Ohne Cast geht nur mit Reflection :D Aber was ist an dem Cast so schlimm?

Alternativ kannst du dir eine Cast-Helper-Methode machen.

Java:
public static <T> T cast(Object object) {
  return (T) object;
}
 

Noctarius

Top Contributor
PS: Mach lieber einen InstanceOf Vergleich :)

Java:
if(info.getClass() == InfoPosChange.class)
Java:
if(info instanceof InfoPosChange)
 

Murray

Top Contributor
1. Was hat SuppressWarning("unused") denn mit dem Cast zu tun?

2. Ist es Absicht, dass du
Java:
if(info.getClass() == InfoPosChange.class){
schreibst und nicht
Java:
if(info instanceof InfoPosChange){
?
 

Mortal_Shadow

Aktives Mitglied
t.t
Mir ist gerade etwas aufgefallen:
@SuppressWarnings("unused")
Ich wollte das sauberer machen, da ansonsten diese Warung kam.
(Wie eraa grad gepostet hat, ist das aber keine Typ-unsafety warnung)
Ich sollte erst denken dann posten....
Danke auf jedenfall für die Hilfe, ging ja saumäßig schnell.

Ps: Danke für den insatnceof-tipp.
 

Noctarius

Top Contributor
Hö? Was ist das denn? :eek: Woher soll die methode wissen, was T ist? Wieso lässt mein Compiler das durchgehen?! Und vor allem: wozu soll das gut sein, der Compiler tut so, als ob T einfach Object wäre, wenn man die Methode aufruft ???:L

Weil der Compiler dann den Typ T zur Compilezeit anhand des Types der Variable, in welcher das Result gespeichert wird, festlegt. Er geht dann einfach davon aus, dass der Programmierer schon sicher weiß das es geht. Wenn's trotzdem nicht passt fliegt eine ClassCastException.

Java:
String foo = cast("foo");
Integer foo = cast(15);

Ich kann auf diese Weise auch einige andere Dinge sicherstellen :)
Java:
public static <T> T newInstance(Class<T> clazz) { return (T) clazz.newInstance(); }

String foo = newInstance(String.class); // geht
String foo2 = newInstance(Integer.class); // geht nicht

Z.B. hier auf Zeile 62:
https://code.google.com/p/javaxmlpa...ourceprojects/xmlparser/XmlParserFactory.java
 
Zuletzt bearbeitet:

0x7F800000

Top Contributor
Weil der Compiler dann den Typ T zur Compilezeit anhand des Types der Variable, in welcher das Result gespeichert wird, festlegt. Er geht dann einfach davon aus, dass der Programmierer schon sicher weiß das es geht. Wenn's trotzdem nicht passt fliegt eine ClassCastException.
Ähm... An zehn tausend milliarden stellen schreibt man die typen immer doppelt und dreifach, und ausgerechnet für irgendwelchen casting-quatsch ist Typinferenz aktiviert? Was zum Teufel...
Java:
class C{
	public static <T> T cast(Object o){
		return (T)o;
	}
	
	public static void foo(String s){
		
	}
	
	{
		String s = cast(2345);	//dieser quatsch geht
		foo(cast(2345));		//dieser quatsch geht nicht
	}
}
Gibt es dafür irgeneine sinnvolle Anwendung, die nicht nur zum Schmeißen von ClassCastExceptions gut ist? ???:L

Manoman, man lernt doch nie aus... :noe:
 

Noctarius

Top Contributor
Siehe den Factory-Code von mir oben. Ja gibt es (für die JVM gibt es eh nur Objects).

Das zweite geht nicht, weil dort keine Zuweisung an eine Variable stattfindet und somit kein Typ definiert ist. Das zweite legt das Ergebnis nur auf den Stack.

edit: Wird sogar in der JRE genutzt :p
 
Zuletzt bearbeitet:

Noctarius

Top Contributor
Als Nachtrag, hier die Stelle im JLS:

Names
The scope of a method's type parameter is the entire declaration of the method, including the type parameter section itself. Therefore, type parameters can appear as parts of their own bounds, or as bounds of other type parameters declared in the same section.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Wie "unchecked cast" hier vermeiden? Java Basics - Anfänger-Themen 2
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
berserkerdq2 Habe ein Spiel entwickelt, dass immer in der 4 Runde einen cast-Fehler erhält Java Basics - Anfänger-Themen 3
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
O Cast Java Basics - Anfänger-Themen 16
R Cast java.awt.Graphics Java Basics - Anfänger-Themen 7
N Simpler cast? Java Basics - Anfänger-Themen 9
D Java Eclipse cannot be cast to java.awt.event.ItemListener Java Basics - Anfänger-Themen 3
O Kleine Frage zu cast Java Basics - Anfänger-Themen 3
A Ohne Cast auf Methode zugreifen? Java Basics - Anfänger-Themen 4
J Datentypen Cast von int zu char führ zu 'Sonderzeichen' Java Basics - Anfänger-Themen 2
K Cast bei equals Java Basics - Anfänger-Themen 2
N Vererbung Verschiedene Subclasses nach cast zur Superclass unterscheiden Java Basics - Anfänger-Themen 9
N Cast eines Objektes in eine Hashmap Java Basics - Anfänger-Themen 13
K Date cannot be cast to java.lang.Integer Java Basics - Anfänger-Themen 4
R Variablen Möglich?: Cast einer Referenzvariable auf den Typ seines Objektes Java Basics - Anfänger-Themen 19
S Datentypen Reflection Cast anhand eines Strings? Java Basics - Anfänger-Themen 7
M ListIterator + Cast Java Basics - Anfänger-Themen 12
M Cast nach int Java Basics - Anfänger-Themen 8
M object cast auf double Java Basics - Anfänger-Themen 2
I double (cast) rundungsproblem Java Basics - Anfänger-Themen 8
M Datentypen java.util.Arrays$ArrayList cannot be cast to [Ljava.lang.String; Java Basics - Anfänger-Themen 11
L Type/Cast Problem Java Basics - Anfänger-Themen 6
E Klassen ClassCastException bei gleichnamigem: paket.klasse cannot be cast to paket.klasse Java Basics - Anfänger-Themen 10
T Datentypen byte -Division..mal gehts mit cast mal ohne Java Basics - Anfänger-Themen 5
M Collections Cast bei ArrayList (List) Java Basics - Anfänger-Themen 2
T Datentypen default ist int, cast zu byte nötig... Java Basics - Anfänger-Themen 2
C Generics und Cast Java Basics - Anfänger-Themen 5
M Polymorphie Cast:Verständnis und Ausführung Java Basics - Anfänger-Themen 10
E Datentypen type cast problem (int, byte,) Java Basics - Anfänger-Themen 5
A Cast ohne Warnung bei Generics Java Basics - Anfänger-Themen 2
J cast zu int immer 0.. Java Basics - Anfänger-Themen 6
I java.lang.String cannot be cast to OBJEKT Java Basics - Anfänger-Themen 8
A Object -> String mit valueOf, toString oder cast ? Java Basics - Anfänger-Themen 6
M Generics - "Unchecked cast"-Warnung wegbekommen Java Basics - Anfänger-Themen 4
B Exception cast to CORBA.Object Java Basics - Anfänger-Themen 2
K Cast-Operator Java Basics - Anfänger-Themen 3
Guybrush Threepwood Inhalt eines Strings für cast verwenden Java Basics - Anfänger-Themen 6
A Seltsame Class Cast Exception Java Basics - Anfänger-Themen 3
V Cast-Operator Java Basics - Anfänger-Themen 2
kulturfenster Cast Probleme Java Basics - Anfänger-Themen 2
V Frage zu final und Class bzw. Class.cast Java Basics - Anfänger-Themen 5
F paket.Klasse cannot be cast to paket.Klasse Java Basics - Anfänger-Themen 6
J Cast-Problem Java Basics - Anfänger-Themen 7
D Class Cast Exception Java Basics - Anfänger-Themen 5
R variabler cast Java Basics - Anfänger-Themen 5
G cast von Char nach int Java Basics - Anfänger-Themen 3
zilti Cast Exception bei JTable Java Basics - Anfänger-Themen 15
S "Unchecked Cast" Warnung Java Basics - Anfänger-Themen 3
G cast von int To Integer? Java Basics - Anfänger-Themen 3
M Double -> Int Cast funktioniert nicht. Java Basics - Anfänger-Themen 5
vogella Cast from Collection.toArray to String[] Java Basics - Anfänger-Themen 2
B Cast explizit verbieten Java Basics - Anfänger-Themen 10
E Cast von Object zu int (Array) Java Basics - Anfänger-Themen 19
W Java Cast bei Vectoren Java Basics - Anfänger-Themen 10
A Cast Generics Java Basics - Anfänger-Themen 6
M Class Cast Exception Java Basics - Anfänger-Themen 7
J Cast zwischen zwei Unterklassen der selben Oberklasse. Java Basics - Anfänger-Themen 7
B Byte übergeben ohne cast? Java Basics - Anfänger-Themen 12
L Redundanz mit Array vermeiden. Java Basics - Anfänger-Themen 42
A Wiederholte Ausgabe vermeiden Java Basics - Anfänger-Themen 16
S java.nio.file.FileSystemException bei Dateizugriff vermeiden Java Basics - Anfänger-Themen 7
I Input/Output 3 Werte in Datei schreiben, duplikate vermeiden Java Basics - Anfänger-Themen 4
T doppelten Code vermeiden Java Basics - Anfänger-Themen 1
S Variablen viele Instanzvariablen vermeiden Java Basics - Anfänger-Themen 14
D Bei eingeben von Zahlen den Zeilensprung vermeiden Java Basics - Anfänger-Themen 3
Haave EAN-13-Prüfziffer: Vermeiden von Eingaben mit mehr/weniger als 12 Ziffern Java Basics - Anfänger-Themen 3
C Arrays vermeiden?? Java Basics - Anfänger-Themen 13
B Wie Code-Redundanz vermeiden? Java Basics - Anfänger-Themen 2
A "Schmutziges Programmieren" vermeiden Java Basics - Anfänger-Themen 10
P Zeilnumbruch vermeiden bei einer Tabelle *hilfe* Java Basics - Anfänger-Themen 11
P Codeverdoppelung vermeiden Java Basics - Anfänger-Themen 3
E Vermeiden,dass mehrere Instanzen eines Java-Programms laufen Java Basics - Anfänger-Themen 2
E Rekursion vermeiden Java Basics - Anfänger-Themen 9
G java.util.LinkedList: Doppelte Elemente vermeiden Java Basics - Anfänger-Themen 5
S Überladen von Funktionen vermeiden Java Basics - Anfänger-Themen 5
G Wie doppelte Einträge in ComboBox vermeiden ? Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben