java - texto - Cómo lanzar un objeto a un int
int jcombobox java (17)
Escenario 1: caso simple
Si se garantiza que su objeto es un Integer
, esta es la manera más simple:
int x = (Integer)yourObject;
Escenario 2: cualquier objeto numérico
En Java Integer
, Long
, BigInteger
etc. todos implementan la interfaz Number
que tiene un método llamado intValue
. Cualquier otro tipo personalizado con un aspecto numérico también debe implementar Number
(por ejemplo: Age implements Number
). Así que puedes:
int x = ((Number)yourObject).intValue();
Escenario 3: analizar texto numérico
Cuando acepta la entrada del usuario desde la línea de comando (o campo de texto, etc.) lo obtiene como una String
. En este caso, puede usar Integer.parseInt(String string)
:
String input = someBuffer.readLine();
int x = Integer.parseInt(input);
Si obtiene entrada como Object
, puede usar (String)input
o, si puede tener otro tipo de texto, input.toString()
:
int x = Integer.parseInt(input.toString());
Escenario 4: hash de identidad
En Java no hay punteros. Sin embargo, Object
tiene una implementación predeterminada similar a un puntero para hashCode()
, que está directamente disponible a través de System.identityHashCode(Object o)
. Así que puedes:
int x = System.identityHashCode(yourObject);
Tenga en cuenta que este no es un valor de puntero real. La JVM puede cambiar la dirección de memoria de los objetos mientras sus hash de identidad se mantienen. Además, dos objetos vivientes pueden tener el mismo hash de identidad.
También puede usar object.hashCode()
, pero puede ser específico de tipo.
Escenario 5: índice único
En los mismos casos, necesita un índice único para cada objeto, como valores de ID autoincrementados en una tabla de base de datos (y a diferencia del hash de identidad, que no es único). Una implementación de muestra simple para esto:
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;
}
}
}
Uso:
ObjectIndexer indexer = new ObjectIndexer();
int x = indexer.indexFor(yourObject); // 1
int y = indexer.indexFor(new Object()); // 2
int z = indexer.indexFor(yourObject); // 1
¿Cómo puedo lanzar un objeto a un int en java?
Consulte este código:
public class sample
{
public static void main(String[] args)
{
Object obj=new Object();
int a=10,b=0;
obj=a;
b=(int)obj;
System.out.println("Object="+obj+"/nB="+b);
}
}
No puedes. Un int
no es un Object
.
Integer
es un Object
, pero dudo que sea eso lo que quieres decir.
No se puede hacer Un int
no es un objeto, es un tipo primitivo. Puedes convertirlo a Integer, luego obtener el int.
Integer i = (Integer) o; // throws ClassCastException if o.getClass() != Integer.class
int num = i; //Java 1.5 or higher
Por ejemplo, variable de objeto; hastaId
Object hastaId = session.getAttribute("hastaID");
Por ejemplo, hastaID
un objeto a un int, hastaID
int hastaID=Integer.parseInt(String.valueOf(hastaId));
Responder:
int i = ( Integer ) yourObject;
Si su objeto ya es un número entero, funcionará sin problemas. es decir:
Object yourObject = 1;
// cast here
o
Object yourObject = new Integer(1);
// cast here
etc.
Si su objeto es cualquier otra cosa, primero deberá convertirlo (si es posible) en una int:
String s = "1";
Object yourObject = Integer.parseInt(s);
// cast here
O
String s = "1";
Object yourObject = Integer.valueOf( s );
// cast here
Si el Object
se ha instanciado originalmente como un Integer
, entonces puede bajarlo a un int
usando el operador de reparto (Subtype)
.
Object object = new Integer(10);
int i = (Integer) object;
Tenga en cuenta que esto solo funciona cuando usa al menos Java 1.5 con la función de autoboxing , de lo contrario debe declarar i
como Integer
lugar y luego llamar a intValue()
en él .
Pero si inicialmente no se creó como un Integer
, entonces no se puede abatir de esa manera. Esto daría como resultado una ClassCastException
con el nombre de clase original en el mensaje. Si la representación toString()
del objeto obtenida por String#valueOf()
denota un número entero sintácticamente válido (por ejemplo, solo dígitos, si es necesario con un signo menos al frente), entonces puede usar Integer#valueOf()
o new Integer()
para esto.
Object object = "10";
int i = Integer.valueOf(String.valueOf(object));
Ver también:
Si estás seguro de que este objeto es un Integer
:
int i = (Integer) object;
O, a partir de Java 7, puede escribir de manera equivalente:
int i = (int) object;
Tenga cuidado, puede lanzar una ClassCastException
si su objeto no es un Integer
y una NullPointerException
si su objeto es null
.
De esta forma, asumes que tu Objeto es un Entero (el envolvente int) y lo destrabaste en un int.
int
es una primitiva, por lo que no se puede almacenar como un Object
, la única forma es tener un int
/ boxed como un Integer
luego almacenarlo como un Object
.
Si su objeto es un String
, puede usar el método Integer.valueOf()
para convertirlo en un simple int:
int i = Integer.valueOf((String) object);
Puede arrojar una NumberFormatException
si su objeto no es realmente una String
con un entero como contenido.
Recursos:
Sobre el mismo tema:
Si quiere decir lanzar un String a int, use Integer.valueOf("123")
.
Sin embargo, no puedes convertir la mayoría de los otros objetos a int, porque no tienen un valor int. Por ejemplo, un XmlDocument no tiene ningún valor int.
Supongo que te preguntas por qué C o C ++ te permiten manipular un puntero de objeto como un número, pero no puedes manipular una referencia de objeto en Java de la misma manera.
Las referencias a objetos en Java no son como punteros en C o C ++ ... Los punteros son básicamente enteros y puedes manipularlos como cualquier otro int. Las referencias son intencionalmente una abstracción más concreta y no pueden ser manipuladas como lo hacen los indicadores.
Suponiendo que el objeto es un objeto Integer
, puede hacer esto:
int i = ((Integer) obj).intValue();
Si el objeto no es un objeto Integer
, entonces debe detectar el tipo y convertirlo en función de su tipo.
Tienes que convertirlo en un Entero (clase contenedora de int). Luego puede usar el método intValue () de Integer para obtener el int interno.
Uso un trazador de líneas cuando proceso datos de GSON:
int i = object != null ? Double.valueOf(object.toString()).intValue() : 0;
primer control con la palabra clave instanceof. si es cierto, entonces cállalo.
@Deprecated
public static int toInt(Object obj)
{
if (obj instanceof String)
{
return Integer.parseInt((String) obj);
} else if (obj instanceof Number)
{
return ((Number) obj).intValue();
} else
{
String toString = obj.toString();
if (toString.matches("-?/d+"))
{
return Integer.parseInt(toString);
}
throw new IllegalArgumentException("This Object doesn''t represent an int");
}
}
Como puede ver, esta no es una forma muy eficiente de hacerlo. Simplemente tiene que estar seguro de qué tipo de objeto tiene. Luego, conviértalo en int del modo correcto.
int i = (Integer) object; //Type is Integer.
int i = Integer.parseInt((String)object); //Type is String.
int[] getAdminIDList(String tableName, String attributeName, int value) throws SQLException {
ArrayList list = null;
Statement statement = conn.createStatement();
ResultSet result = statement.executeQuery("SELECT admin_id FROM " + tableName + " WHERE " + attributeName + "=''" + value + "''");
while (result.next()) {
list.add(result.getInt(1));
}
statement.close();
int id[] = new int[list.size()];
for (int i = 0; i < id.length; i++) {
try {
id[i] = ((Integer) list.get(i)).intValue();
} catch(NullPointerException ne) {
} catch(ClassCastException ch) {}
}
return id;
}
// enter code here
Este código muestra por qué ArrayList
es importante y por qué lo usamos. Simplemente lanzando int
desde Object
. Puede ser útil