我一直发现这里和谷歌上的人都有从long到int的麻烦,而不是相反。然而,我确信我不是唯一一个在从int型转向Long型之前遇到这种情况的人。
我找到的唯一其他答案是“一开始就把它设置为长”,这并没有解决这个问题。
我最初尝试了类型转换,但我得到了一个“不能从int类型转换为Long类型”
for (int i = 0; i < myArrayList.size(); ++i ) {
content = new Content();
content.setDescription(myArrayList.get(i));
content.setSequence((Long) i);
session.save(content);
}
正如你可以想象的,我有点困惑,我被困在使用int,因为一些内容是作为一个数组列表进来的,而我存储这个信息的实体需要序列号作为一个长。
我在这方面遇到了很大的麻烦。我只是想:
thisBill.IntervalCount = jPaidCountSpinner.getValue();
其中IntervalCount是Long, JSpinner被设置为返回Long。最后我不得不写出这个函数:
public static final Long getLong(Object obj) throws IllegalArgumentException {
Long rv;
if((obj.getClass() == Integer.class) || (obj.getClass() == Long.class) || (obj.getClass() == Double.class)) {
rv = Long.parseLong(obj.toString());
}
else if((obj.getClass() == int.class) || (obj.getClass() == long.class) || (obj.getClass() == double.class)) {
rv = (Long) obj;
}
else if(obj.getClass() == String.class) {
rv = Long.parseLong(obj.toString());
}
else {
throw new IllegalArgumentException("getLong: type " + obj.getClass() + " = \"" + obj.toString() + "\" unaccounted for");
}
return rv;
}
这似乎很管用。再多简单的铸造,上面的解决方案都不适合我。非常令人沮丧。
我们将使用数字引用来获得长值。
public static long toLong(Number number){
return number.longValue();
}
它适用于所有数字类型,下面是一个测试:
public static void testToLong() throws Exception {
assertEquals(0l, toLong(0)); // an int
assertEquals(0l, toLong((short)0)); // a short
assertEquals(0l, toLong(0l)); // a long
assertEquals(0l, toLong((long) 0)); // another long
assertEquals(0l, toLong(0.0f)); // a float
assertEquals(0l, toLong(0.0)); // a double
}