2015-06-18 4 views
-5

В настоящее время я пытаюсь использовать System.out.print для выдачи типа из целого числа x. Однако из того, что я нашел, единственными функциями, имитирующими typeOf, являются getClass, который не работает на int или instanceof, который, похоже, работает только с if. Есть ли какая-нибудь другая команда, которую я мог бы попробовать, или я застрял с System.out.print("Integer")?
typeOf без использования getClass() или instanceof

+1

Почему вы должны знать тип литерала? Сам литерал говорит вам о своем типе. Или это не то, что вы имеете в виду? –

+1

Что вы пытаетесь сделать и почему вам нужно проверить, является ли элемент 'int'? Обратите внимание, что вы можете использовать 'int.class'. –

+0

Мне не нужно его проверять, но выдавать какой элемент. Я пытаюсь найти способ сделать это без строки, так как я вкратце несколько раз изменил тип объекта при работе над ним. – byj

ответ

4

Обратите внимание, что Java является статически типизированным языком. Нет необходимости проверять тип примитива переменной во время выполнения, потому что он известен во время компиляции и не может измениться. Например, если вы объявляете

int x = 5; 

Тогда x не может быть ничего другого, кроме int, поэтому пытаются сделать что-то вроде typeof(x) (как и в некоторых других языках) не имеет смысла.

Вы можете обобщать тип переменной присваиваем его Object ссылочного типа:

int x = 5; 
Object obj = x; 

Но даже в этом случае obj не будет int. В этом случае Java-компилятор автоматически поместит ваш x в Integer, поэтому obj.getClass().getName() вернет java.lang.Integer и obj instanceof Integer вернет true.

1

Как правило, нет разумных оснований для этого, если вы знаете тип, вам не нужна функция для его работы.

Единственный раз, когда это полезно, это когда вы не можете определить тип, например. потому что вы учитесь, и тип не очевиден. Вы можете реализовать это, используя перегруженную функцию, подобную этой.

public static void main(String[] args) { 
    byte b = 1; 
    byte a = 2; 
    System.out.println("The type of a+b is "+typeOf(a+b)); 
    long l = 1; 
    float f = 2; 
    System.out.println("The type of l+f is "+typeOf(l+f)); 
} 
public static String typeOf(byte b) { 
    return "byte"; 
} 
public static String typeOf(char ch) { 
    return "char"; 
} 
public static String typeOf(short s) { 
    return "short"; 
} 
public static String typeOf(int i) { 
    return "int"; 
} 
public static String typeOf(long i) { 
    return "long"; 
} 
public static String typeOf(float i) { 
    return "float"; 
} 
public static String typeOf(double i) { 
    return "double"; 
} 
public static String typeOf(boolean b) { 
    return "boolean"; 
} 
public static String typeOf(Object o) { 
    return o.getClass().getName(); 
} 

печатает

The type of a+b is int 
The type of l+f is float 
Смежные вопросы