¿Cómo puedo verificar para asegurarme de que mi variable sea un int, array, double, etc.?
Editar: Por ejemplo, ¿cómo puedo verificar que una variable sea una matriz? ¿Hay alguna función para hacer esto?
¿Cómo puedo verificar para asegurarme de que mi variable sea un int, array, double, etc.?
Editar: Por ejemplo, ¿cómo puedo verificar que una variable sea una matriz? ¿Hay alguna función para hacer esto?
Respuestas:
Java es un lenguaje de tipo estático, por lo que el compilador realiza la mayor parte de esta verificación por usted. Una vez que declara que una variable es de cierto tipo, el compilador se asegurará de que solo se le asignen valores de ese tipo (o valores que sean subtipos de ese tipo).
Los ejemplos que proporcionó ( int, array, double) son todos primitivos y no hay subtipos de ellos. Por lo tanto, si declara que una variable es un int:
int x;
Puede estar seguro de que solo tendrá intvalores.
Sin embargo, si declaró que una variable es a List, es posible que la variable contenga subtipos de List. Ejemplos de estos incluyen ArrayList, LinkedList, etc.
Si tiene una Listvariable y necesita saber si es una ArrayList, puede hacer lo siguiente:
List y;
...
if (y instanceof ArrayList) {
...its and ArrayList...
}
Sin embargo, si piensa que debe hacerlo, es posible que desee reconsiderar su enfoque. En la mayoría de los casos, si sigue principios orientados a objetos, no necesitará hacer esto. Sin embargo, existen, por supuesto, excepciones a todas las reglas.
En realidad, es bastante fácil hacer rodar su propio probador, abusando de la capacidad de sobrecarga de métodos de Java. Aunque todavía tengo curiosidad por saber si hay un método oficial en el sdk.
Ejemplo:
class Typetester {
void printType(byte x) {
System.out.println(x + " is an byte");
}
void printType(int x) {
System.out.println(x + " is an int");
}
void printType(float x) {
System.out.println(x + " is an float");
}
void printType(double x) {
System.out.println(x + " is an double");
}
void printType(char x) {
System.out.println(x + " is an char");
}
}
luego:
Typetester t = new Typetester();
t.printType( yourVariable );
a.getClass().getName()- le dará el tipo de datos del objeto real al que se hace referencia a, pero no el tipo de datos con el que ase declaró originalmente la variable o al que se convirtió posteriormente.
boolean b = a instanceof String- le dará si el objeto real al que hace referencia aes una instancia de una clase específica. Una vez más, el tipo de datos con el que ase declaró originalmente la variable o al que posteriormente se convirtió no tiene relación con el resultado del operador instanceof.
Tomé esta información de: ¿Cómo sabes un tipo de variable en java?
Esto puede suceder. Estoy tratando de analizar un Stringen un int y me gustaría saber si mi Integer.parseInt(s.substring(a, b))está echando un int o basura antes de intentar resumirlo.
Por cierto, esto se conoce como Reflexión. Aquí hay más información sobre el tema: http://docs.oracle.com/javase/tutorial/reflect/
Puede trabajar con Integer en lugar de int, Double en lugar de double, etc. (tales clases existen para todos los tipos primitivos). Entonces puede usar el operador instanceof, comoif(var instanceof Integer){...}
Solo usa:
.getClass().getSimpleName();
Ejemplo:
StringBuilder randSB = new StringBuilder("just a String");
System.out.println(randSB.getClass().getSimpleName());
Salida:
StringBuilder
randSBmantiene NULL.
Bueno, creo que la verificación del tipo de variable se puede hacer de esta manera.
public <T extends Object> void checkType(T object) {
if (object instanceof Integer)
System.out.println("Integer ");
else if(object instanceof Double)
System.out.println("Double ");
else if(object instanceof Float)
System.out.println("Float : ");
else if(object instanceof List)
System.out.println("List! ");
else if(object instanceof Set)
System.out.println("Set! ");
}
De esta forma, no es necesario tener varios métodos sobrecargados. Creo que es una buena práctica usar colecciones sobre matrices debido a los beneficios adicionales. Habiendo dicho eso, no sé cómo verificar un tipo de matriz. Quizás alguien pueda mejorar esta solución. ¡Espero que esto ayude!
PD: Sí, sé que esto tampoco busca primitivas.
La primera parte de tu pregunta no tiene sentido. No hay ninguna circunstancia en la que no sepa el tipo de variable primitiva en el momento de la compilación.
Con respecto a la segunda parte, la única circunstancia en la que aún no sabe si una variable es una matriz es si es un objeto. En cuyo caso object.getClass().isArray()te lo diré.
Lo hice usando: if(x.getClass() == MyClass.class){...}
No estaba contento con ninguna de estas respuestas, y la correcta no tiene explicación y votos negativos, así que busqué, encontré algunas cosas y las edité para que sea fácil de entender. Juega con él, no tan sencillo como uno esperaría.
//move your variable into an Object type
Object obj=whatYouAreChecking;
System.out.println(obj);
// moving the class type into a Class variable
Class cls=obj.getClass();
System.out.println(cls);
// convert that Class Variable to a neat String
String answer = cls.getSimpleName();
System.out.println(answer);
Aquí hay un método:
public static void checkClass (Object obj) {
Class cls = obj.getClass();
System.out.println("The type of the object is: " + cls.getSimpleName());
}
Ninguna de estas respuestas funciona si la variable es un tipo genérico no inicializado
Y por lo que puedo encontrar, solo es posible usando una solución extremadamente fea , o pasando un parámetro inicializado a su función, haciéndolo en su lugar, vea aquí:
<T> T MyMethod(...){ if(T.class == MyClass.class){...}}
NO es válido porque no puede extraer el tipo del Tparámetro directamente, ya que se borra en tiempo de ejecución.
<T> void MyMethod(T out, ...){ if(out.getClass() == MyClass.class){...}}
Esto funciona porque la persona que llama es responsable de crear una instancia de la variable outantes de llamar. Esto todavía generará una excepción si out es nulo cuando se llama, pero en comparación con la solución vinculada, esta es, con mucho, la forma más fácil de hacer esto
Sé que esta es una especie de aplicación específica, pero como este es el primer resultado en Google para encontrar el tipo de variable con Java (y dado que Tes un tipo de variable), creo que debería incluirse
Puede verificarlo fácilmente usando Java.lang.Class.getSimpleName()Método Solo si la variable tiene un tipo no primitivo. No funciona con tipos primitivos int, long, etc.
referencia: aquí está el enlace de documentos de Oracle
Básicamente, por ejemplo:
public class Kerem
{
public static void main(String[] args)
{
short x = 10;
short y = 3;
Object o = y;
System.out.println(o.getClass()); // java.lang.Short
}
}