我一直发现这里和谷歌上的人都有从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,因为一些内容是作为一个数组列表进来的,而我存储这个信息的实体需要序列号作为一个长。


当前回答

使用以下方法:Long.valueOf(int);。

其他回答

只要只有long . valueof (long)方法,在使用long . valueof (intValue)的情况下,将隐式地从int转换为long。

更明确的做法是

Integer.valueOf(intValue).longValue()

我在这方面遇到了很大的麻烦。我只是想:

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;
}

这似乎很管用。再多简单的铸造,上面的解决方案都不适合我。非常令人沮丧。

我有一个小玩具,它也处理非泛型接口。 我可以接受它抛出一个ClassCastException如果饲料错误(OK和快乐)

public class TypeUtil {
    public static long castToLong(Object o) {
        Number n = (Number) o;
        return n.longValue();
    }
}

use

new Long(your_integer);

or

Long.valueOf(your_integer);

注意,到long的强制转换和到long的强制转换是有区别的。如果您强制转换为long(一个基本值),那么它应该自动被装箱为long(包装它的引用类型)。

你也可以使用new创建一个Long实例,用int值初始化它。