Java对象为int:更好的方法?

时间:2009-05-20 20:47:53

标签: java generics

我有一个TreeSet,它将充满整数。总而言之,我试图在列表中存储的最后一个(最大)值之后循环。我现在要做的是获得起始变量:

    Object lastObj = primes.last();
    Integer last = new Integer(lastObj.toString());
    int start = 1 + last.intValue(); // the added 1 is just for program logic

我确信必须有更好的方法将对象(我知道永远是一个int)转换为int'start'。有人知道更好的方法吗?

6 个答案:

答案 0 :(得分:8)

在J2SE 5或更高版本中,它会自动发生,具有“自动装箱”功能。

int start = 1 + last;

http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html

另外,如果你知道它们都是Integer对象,请使用参数化类型:

List<Integer> obj = new ArrayList<Integer>()...

然后将其与自动装箱功能结合使用:

int start = 1 + obj.last();

答案 1 :(得分:8)

您使用的是Java 1.6版吗?在这种情况下,您可以利用autoboxing和泛型来清理代码。

首先,可以将TreeSet声明为仅包含Integer对象

TreeSet<Integer> primes;

现在从集合中获取对象

Integer last = primes.last();

并使用自动装箱功能

int start = 1 + last;

答案 2 :(得分:4)

如果你知道它们在放入时是'int',那么它们在Collection中被转换为Integer(集合不能包含基元,只有对象),因此,你可以简单地Integer last = (Integer)lastObj;

理想情况下,你会使用TreeSet<Integer>,然后它会首先为你提供整数。

答案 3 :(得分:4)

如果您知道primes仅包含整数,则应将primes改为TreeSet<Integer>

然后会变成:

int start = 1 + primes.last().intValue();

如果你不能使用泛型,请使用:

int start = 1 + ((Integer)prime.last()).intValue();

投射到一个字符串只是愚蠢。

顺便说一句,我不建议使用自动装箱。它背后有各种各样的东西。明确使用Integer对我来说似乎更清晰。但这只是我个人的偏好,如果你愿意,你可以使用自动装箱。

答案 4 :(得分:3)

发布Java 1.4后,您可以使用autoboxing

所以它变成了,

int start = 1 + (Integer) primes.last(); // the added 1 is just for program logic

如果您在TreeSet(TreeSet<Integer>)中使用了泛型,则可以删除初始强制转换为Integer。

答案 5 :(得分:2)

为什么你不能只是转换它,而是转换为字符串,然后解析该字符串并创建新的引用?

Object lastObj = primes.last();
int start = 1 + ( ( Integer )lastObj ).intValue();