Como você conhece um tipo variável em java?
String a = "test";
e eu quero saber que tipo é, isto é, a saída deve ser java.lang.String
Como faço isto?
7 answers
a.getClass().getName()
Se queres o nome, usa o método do Martin. Se você quer saber se é uma instância de uma determinada classe:
boolean b = a instanceof String
String str = "test";
String type = str.getClass().getName();
value: type = java.lang.String
Este método:
str.getClass().getSimpleName();
value:String
Agora exemplo:
Object o = 1;
o.getClass().getSimpleName();
value:Integer
a.getClass().getName()
Se queres que funcione com qualquer coisa, podes fazer isto:
((Object) myVar).getClass().getName()
//OR
((Object) myInt).getClass().getSimpleName()
Neste caso, o primitivo será embrulhado num invólucro. Você terá o objeto de o primitivo, nesse caso.
Eu mesmo o usei assim:
private static String nameOf(Object o) {
return o.getClass().getSimpleName();
}
Usando Genéricos:
public static <T> String nameOf(T o) {
return o.getClass().getSimpleName();
}
Usar a funcionalidade de sobrecarga do operador em java
class Test {
void printType(String x) {
System.out.print("String");
}
void printType(int x) {
System.out.print("Int");
}
// same goes on with boolean,double,float,object ...
}
Eu concordo com o que Joachim Sauer disse, não é possível saber (o tipo variável! não é o tipo de valor!) a menos que sua variável seja um atributo de classe (e você teria que recuperar campos de classe, obter o campo direito pelo nome...)
Na verdade para mim é totalmente impossível que qualquer método {[[0]} lhe dê a resposta certa, já que a resposta seria diferente no mesmo objeto exato, de acordo com o contexto em que você chama este método...
Como teehoo disse, se souberes na compilação lista definida de tipos para testar você pode usar instanceof, mas você também terá subclasses retornando true...Uma solução possível seria também inspirar-se da implementação de java.lang.reflect.Field
e criar a sua própria classe Field
, e depois declarar todas as suas variáveis locais como esta implementação custom Field
... mas é melhor você encontrar outra solução, eu realmente me pergunto por que você precisa do tipo variável, e não apenas o tipo de valor?
- o instace de pode ser uma solução.
- Sistema.as.println (((objecto)f).getClass().getName ());
Ou
- inteiro.classe.isInstance (1985); / / gives verdadeiro
Ou
-
[[2]}IsPrimitive ()
public static void main(String[] args) { ClassDemo classOne = new ClassDemo(); Class classOneClass = classOne(); int i = 5; Class iClass = int.class; // checking for primitive type boolean retval1 = classOneClass.isPrimitive(); System.out.println("classOneClass is primitive type? = " + retval1); // checking for primitive type? boolean retval2 = iClass.isPrimitive(); System.out.println("iClass is primitive type? = " + retval2); }
- Falso
- verdadeiro
Descubra mais aqui: Como determinar o tipo primitivo de uma variável primitiva?
Https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
Http://docs.oracle.com/cd/E26806_01/wlp.1034/e14255/com/bea/p13n/expression/operator/Instanceof.html