我一直在这里找到这两个人和谷歌人从long
到int
遇到麻烦,而不是相反。然而,我确信在从int
到Long
之前,我不是唯一遇到这种情况的人。
我发现的唯一其他答案是“首先将它设置为Long”,这实际上并没有解决这个问题。
我最初尝试铸造,但我得到了“Cannot cast from int to 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
的形式出现,而且我存储此信息的实体要求序列号为Long,所以我不得不使用ArrayList
。
请注意,投射到long
和投射到Long
之间存在差异。如果你转换为long
(一个原始值),那么它应该自动装箱到Long
(包装它的引用类型)。
您也可以使用new
创建Long
的实例,使用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;
}
这似乎是诀窍。没有多少简单的铸造,上述解决方案都不适合我。很沮丧。
//Suppose you have int and you wan to convert it to Long
int i=78;
//convert to Long
Long l=Long.valueOf(i)
一旦只有方法Long.valueOf(long)
,从int
到long
的演员将在使用Long.valueOf(intValue)
时隐式完成。
更明确的方法是
Integer.valueOf(intValue).longValue()
使用以下:Long.valueOf(int);
。
如果您已将int类型化为Integer,则可以执行以下操作:
Integer y = 1;
long x = y.longValue();
使用
new Long(your_integer);
要么
Long.valueOf(your_integer);
我有这个小玩具,也处理非通用接口。如果输入错误,我可以抛出ClassCastException(OK和happy)
public class TypeUtil {
public static long castToLong(Object o) {
Number n = (Number) o;
return n.longValue();
}
}
在Java中,您可以:
int myInt=4;
Long myLong= new Long(myInt);
在你的情况下,它将是:
content.setSequence(new Long(i));
我们将通过使用Number
参考获得长值。
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
}
怎么样
int myInt = 88;
//不会编译
Long myLong = myInt;
//编译,并保留int的非NULL精神。最好的演员阵容根本没有演员阵容。当然,您的用例可能需要Long和可能的NULL值。但是如果int或其他long是你唯一的输入,并且你的方法可以被修改,我会建议这种方法。
long myLong = myInt;
//编译,是最有效的方法,并清楚地表明源值是,永远不会是NULL。
Long myLong = (long) myInt;
1,new Long(intValue);
2,Long.valueOf(intValue);