Szenario 1: einfacher Fall
Wenn garantiert ist, dass Ihr Objekt ein Objekt ist Integer
, ist dies der einfache Weg:
int x = (Integer)yourObject;
Szenario 2: ein beliebiges numerisches Objekt
In Java Integer
, Long
, BigInteger
implementieren usw. alle Number
Schnittstelle , die eine Methode mit dem Namen hat intValue
. Alle anderen benutzerdefinierten Typen mit einem numerischen Aspekt sollten ebenfalls implementiert werden Number
(zum Beispiel :) Age implements Number
. Also kannst du:
int x = ((Number)yourObject).intValue();
Szenario 3: Analysieren Sie numerischen Text
Wenn Sie Benutzereingaben über die Befehlszeile (oder ein Textfeld usw.) akzeptieren, erhalten Sie diese als String
. In diesem Fall können Sie verwenden Integer.parseInt(String string)
:
String input = someBuffer.readLine();
int x = Integer.parseInt(input);
Wenn Sie eine Eingabe als erhalten Object
, können Sie Folgendes verwenden (String)input
oder, wenn es einen anderen Texttyp haben kann input.toString()
:
int x = Integer.parseInt(input.toString());
Szenario 4: Identitäts-Hash
In Java gibt es keine Zeiger. Hat Object
jedoch eine zeigerähnliche Standardimplementierung für hashCode()
, die direkt über verfügbar ist System.identityHashCode(Object o)
. Also kannst du:
int x = System.identityHashCode(yourObject);
Beachten Sie, dass dies kein echter Zeigerwert ist. Die Speicheradresse von Objekten kann von der JVM geändert werden, während ihre Identitäts-Hashes beibehalten werden. Außerdem können zwei lebende Objekte denselben Identitäts-Hash haben.
Sie können auch verwenden object.hashCode()
, es kann jedoch typspezifisch sein.
Szenario 5: eindeutiger Index
In den gleichen Fällen benötigen Sie einen eindeutigen Index für jedes Objekt, z. B. um automatisch inkrementierte ID-Werte in einer Datenbanktabelle (und im Gegensatz zu Identitäts-Hashs, die nicht eindeutig sind). Eine einfache Beispielimplementierung hierfür:
class ObjectIndexer {
private int index = 0;
private Map<Object, Integer> map = new WeakHashMap<>();
public int indexFor(Object object) {
if (map.containsKey(object)) {
return map.get(object);
} else {
index++;
map.put(object, index);
return index;
}
}
}
Verwendung:
ObjectIndexer indexer = new ObjectIndexer();
int x = indexer.indexFor(yourObject); // 1
int y = indexer.indexFor(new Object()); // 2
int z = indexer.indexFor(yourObject); // 1
Szenario 6: Mitglied auflisten
In Java sind Enum-Mitglieder keine Ganzzahlen, sondern Objekte mit vollem Funktionsumfang (im Gegensatz zu beispielsweise C / C ++). Wahrscheinlich ist es nie erforderlich, ein Enum-Objekt in zu konvertieren. int
Java ordnet jedoch jedem Enum-Mitglied automatisch eine Indexnummer zu. Auf diesen Index kann beispielsweise zugegriffen werden über Enum.ordinal()
:
enum Foo { BAR, BAZ, QUX }
// ...
Object baz = Foo.BAZ;
int index = ((Enum)baz).ordinal(); // 1
Object
nicht der Fall istInteger
, bin ich mir nicht sicher, was Sie von Ihrer Besetzung erwarten.