Java can Object cast to ...?
Hey!
Ich arbeite gerade an einem Minecraft Challenge Plugin. Dabei möchte ich überprüfen ob ein Object zu einem von mir erstellten Object casten kann.
Allerdings weiß ich nicht wie das geht. Kann mir dabei jemand helfen?
Code:
package de.system.settings;import org.bukkit.Material;import org.bukkit.co - Pastebin.com
der Fehler ist in der Zeile 27.
MFG
1 Antwort
Zur Laufzeit gibt es den generischen Typ nicht mehr. Daher kannst du ihn auch nicht in Kombination mit dem instanceof-Operator verwenden.
Stattdessen kannst du aber die isAssignableFrom-Methode verwenden. Dafür brauchst du die Klasseninformation zum zu prüfenden Objekt und die Klasseninformation zum generischen Typ.
public boolean isInstanceOf(Class<T> type, Object objectToCheck) {
return type.isAssignableFrom(objectToCheck.getClass());
}
// usage:
if (someObject.isInstanceOf(String.class, "some value")) {
System.out.println("Is String");
}
Alternativ würde es ebenso mit der isInstance-Methode klappen.
type.isInstance(objectToCheck)
Im Hinblick auf deinen Code würde ich dir übrigens dazu raten, ein paar Redundanzen loszuwerden. Da sich das name-Feld im Namen offensichtlich nie ändert, könnte es als Konstante gekennzeichnet werden und den Key könntest du direkt im Konstruktor in einem weiteren Feld speichern.
private final String challengesKey;
// constructor
challengesKey = "Challenges.Settings." + getName();
Sollte er sich zukünftig einmal ändern, brauchst du nur noch eine Stelle im Code ändern und die Anzahl an Zeilen, in denen Tippfehler auftauchen können, reduziert sich erheblich.
Außerdem brauchst du die Konfiguration nicht mehrmals einlesen, wenn du den Wert doch bereits in obj gespeichert hast.
if (config.contains(challengesKey)) {
Object challenges = config.get(challengesKey);
if (/* check type ... */) {
setValue((T)challenges);
}
}