我如何在java中将对象转换为int型?
当前回答
@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");
}
}
正如你所看到的,这不是一个非常有效的方法。你只需要确定你所拥有的对象类型。然后以正确的方式将其转换为int型。
其他回答
必须将其强制转换为Integer (int的包装类)。然后,您可以使用Integer的intValue()方法来获取内部整型。
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
这段代码说明了为什么ArrayList很重要,以及为什么要使用它。简单地从Object转换int。可能会有帮助。
场景一:简单案例
如果它保证你的对象是一个Integer,这是一个简单的方法:
int x = (Integer)yourObject;
场景2:任何数字对象
在Java中,Integer, Long, BigInteger等都实现了Number接口,它有一个名为intValue的方法。任何其他具有数字方面的自定义类型也应该实现Number(例如:Age实现Number)。所以你可以:
int x = ((Number)yourObject).intValue();
场景3:解析数值文本
当你接受用户输入从命令行(或文本字段等),你得到它作为一个字符串。在这种情况下,您可以使用Integer。方法用于字符串(String):
String input = someBuffer.readLine();
int x = Integer.parseInt(input);
如果你以Object形式获取输入,你可以使用(String)输入,或者,如果它可以有其他文本类型,则使用input. tostring ():
int x = Integer.parseInt(input.toString());
场景4:身份哈希
在Java中没有指针。但是Object对hashCode()有一个类似指针的默认实现,可以通过System直接获得。identityHashCode(Object o).所以你可以:
int x = System.identityHashCode(yourObject);
注意,这不是一个真正的指针值。对象的内存地址可以由JVM更改,同时保留它们的标识散列。另外,两个活动对象可以具有相同的标识哈希。
也可以使用object.hashCode(),但它可以是特定于类型的。
场景5:唯一索引
在同样的情况下,每个对象都需要一个唯一的索引,比如在数据库表中自动递增ID值(不像标识哈希是不唯一的)。一个简单的示例实现:
class ObjectIndexer {
private int index = 0;
private Map<Object, Integer> map = new WeakHashMap<>();
// or:
// new WeakIdentityHashMap<>();
public int indexFor(Object object) {
if (map.containsKey(object)) {
return map.get(object);
} else {
index++;
map.put(object, index);
return index;
}
}
}
用法:
ObjectIndexer indexer = new ObjectIndexer();
int x = indexer.indexFor(yourObject); // 1
int y = indexer.indexFor(new Object()); // 2
int z = indexer.indexFor(yourObject); // 1
场景6:enum成员
在Java中,enum成员不是整数,而是全功能对象(例如,与C/ c++不同)。可能永远不需要将枚举对象转换为int,但是Java会自动将索引号与每个枚举成员关联起来。这个索引可以通过enumel .ordinal()访问,例如:
enum Foo { BAR, BAZ, QUX }
// ...
Object baz = Foo.BAZ;
int index = ((Enum)baz).ordinal(); // 1
你不能。int不是Object。
虽然整数是一个对象,但我怀疑这是你的意思。
首先使用instanceof关键字进行检查。如果为真,则转换它。
推荐文章
- 如何查看IntelliJ中的编译错误列表?
- Java SimpleDateFormat("yyyy-MM-dd' t ' hh:mm:ss' z '")给出的时区为IST
- 杰克逊克服下划线,支持骆驼案
- List、List<?>, List<T>, List<E>, List<Object>
- 在Java中转换字符串到日历对象
- 在java中使用wait()和notify()的简单场景
- 增强的for循环中的Null检查
- c# vs Java Enum(适合c#新手)
- 如何在不强制转换的情况下将double转换为long ?
- for循环和for-each循环在性能上有区别吗?
- 你如何比较两个版本的字符串在Java?
- 为什么在Java和。net中不能修改字符串?
- java.util.Random真的那么随机吗?我怎么能生成52!(阶乘)可能的序列?
- ZoneOffset之间的区别是什么。UTC和ZoneId.of(“UTC”)?
- 类未找到:IntelliJ中的空测试套件