Es gibt eine einfache Art und Weise, Das implizite Boxen braucht man nicht, damit man nicht verwirrt wird Tween-Primitive und ihre Wrapper. Sie können isInstance
nicht für primitive Typen verwenden - z. Rufen Integer.TYPE.isInstance(5)
(Integer.TYPE
entspricht int.class
) wird zurück false
als 5
ist in eine Integer
vorher handoboxed.
Der einfachste Weg, um zu bekommen, was Sie wollen (beachten Sie - es ist technisch zur Kompilierzeit für Primitive gemacht, aber es erfordert immer noch die Auswertung des Arguments) ist durch Überladen. Siehe meine ideone paste.
...
public static Class<Integer> typeof(final int expr) {
return Integer.TYPE;
}
public static Class<Long> typeof(final long expr) {
return Long.TYPE;
}
...
Dies kann wie folgt zum Beispiel verwendet werden:
System.out.println(typeof(500 * 3 - 2)); /* int */
System.out.println(typeof(50 % 3L)); /* long */
dies auf den Compiler der Fähigkeit beruht, um den Typen des Ausdrucks und holen die richtige Überlast zu bestimmen.
Suchen Sie nach einer 'Klasse', die' int', 'long' und so weiter repräsentiert? – dasblinkenlight
Sie können keinen primitiven Datentyp haben, ohne dessen Typ zu kennen. Es müsste in eine Art "Nummer" eingereiht werden, damit Sie es nicht wissen. In diesem Fall können Sie "instanceof" verwenden. – Thor84no
@ Thor84no yeah Sie können mit Reflexion – Bohemian