Java ArrayList的铸造元素?

Java ArrayList的铸造元素?,java,Java,src_端口、dst_端口、序列…等是我的ArrayList,但我的构造函数需要int类型。我想我必须对它们进行cas,但不知道如何进行?没有更多的上下文,这很难说,但是如果obj.src\u port是一个ArrayList包含Integer对象,您可以说: TCPPacket TCPobj = new TCPPacket((int)obj.src_port.get(t),(int)obj.dst_port.get(t),

src_端口、dst_端口、序列…等是我的ArrayList,但我的构造函数需要int类型。我想我必须对它们进行cas,但不知道如何进行?

没有更多的上下文,这很难说,但是如果
obj.src\u port
是一个
ArrayList
包含
Integer
对象,您可以说:

TCPPacket TCPobj = new TCPPacket((int)obj.src_port.get(t),(int)obj.dst_port.get(t),
                                       obj.sequence.get(t),obj.ack_num.get(t),obj.urg.get(t),
                                       obj.ack.get(t),obj.psh.get(t), obj.rst.get(t),obj.syn.get(t),
                                       obj.fin.get(t),obj.rsv1.get(t),obj.rsv2.get(t),
                                       obj.window.get(t),obj.urgent_pointer.get(t));

TCPPacket TCPobj=新的TCPPacket(((整数)obj.src_port.get(t)).intValue(),
...
);
);


i、 e.首先必须强制转换为整数,然后取消转换为整数。在Java 5及以后的版本中,将为您执行取消装箱操作。

没有更多上下文,很难说,但是如果
obj.src_port
是一个
ArrayList
包含
Integer
对象,您可以说:

TCPPacket TCPobj = new TCPPacket((int)obj.src_port.get(t),(int)obj.dst_port.get(t),
                                       obj.sequence.get(t),obj.ack_num.get(t),obj.urg.get(t),
                                       obj.ack.get(t),obj.psh.get(t), obj.rst.get(t),obj.syn.get(t),
                                       obj.fin.get(t),obj.rsv1.get(t),obj.rsv2.get(t),
                                       obj.window.get(t),obj.urgent_pointer.get(t));

TCPPacket TCPobj=新的TCPPacket(((整数)obj.src_port.get(t)).intValue(),
...
);
);


i、 e.首先必须强制转换为整数,然后取消转换为整数。在Java 5及以后的版本中,取消装箱将为您完成。

您不能强制转换为int,您需要使用Integer,然后,如果必须以int结束,则调用.intValue()。即:


所有Java原语(boolean、long等)都有完全的对象等价物(boolean、long等),可以转换为。这些对象都有一个访问基元(booleanValue()、longValue()等)的方法,该方法将为您提供与基元等效的方法。

您不能强制转换为int,您需要使用Integer,然后,如果必须以int结束,则调用.intValue()。即:


所有Java原语(boolean、long等)都有完全的对象等价物(boolean、long等),可以转换为。这些对象都有一个访问基元的方法(booleanValue()、longValue()等),这将为您提供与基元等价的方法。

您需要替换每个对象

int thisInt = ((Integer) obj.src_port.get(t)).intValue();


你需要更换每一个

int thisInt = ((Integer) obj.src_port.get(t)).intValue();


虽然您可以使用Chris J概述的方法进行转换,但这可能是解决实际问题的一步

如果您拥有obj类GSE_数据包的控制权,那么您希望有机会让访问器(getter)提供该类型

现在,您的访问器是obj.ack.get(t),如果我没有读错的话,这就是糟糕的面向对象设计。看起来你有object.field.get(t)。您应该有,object.getack(t)

所以在GSE_包中,改变

((Integer)obj.XYZ.get(t)).intValue()


虽然您可以使用Chris J概述的方法进行转换,但这可能是解决实际问题的一步

如果您拥有obj类GSE_数据包的控制权,那么您希望有机会让访问器(getter)提供该类型

现在,您的访问器是obj.ack.get(t),如果我没有读错的话,这就是糟糕的面向对象设计。看起来你有object.field.get(t)。您应该有,object.getack(t)

所以在GSE_包中,改变

((Integer)obj.XYZ.get(t)).intValue()


使用
阵列
和反射


(顺便说一句,反射确实是个坏主意,但我只是想说。)

使用
toArray
和反射


(顺便说一句,反射是一个非常糟糕的主意,但我只是想说。)

如果您控制obj是其实例的类,我强烈建议将这些ArrayList更改为泛型

泛型通过向字节码中添加类型转换来工作,就像自动装箱一样。这两个组合在一起非常有用

例如,如果我有:

class GsePacket {
    private ack;

    public int getAck(what you are passing here) {
        return ack;
    }
}
这在幕后变成了一个等价物:

numbers.add(80); // Boxing

int source_port = numbers.get(0); // Casting, Unboxing

这确实是人为的,但它节省了大量的人工。

如果您控制obj是其实例的类,我强烈建议将这些ArrayList更改为泛型

泛型通过向字节码中添加类型转换来工作,就像自动装箱一样。这两个组合在一起非常有用

例如,如果我有:

class GsePacket {
    private ack;

    public int getAck(what you are passing here) {
        return ack;
    }
}
这在幕后变成了一个等价物:

numbers.add(80); // Boxing

int source_port = numbers.get(0); // Casting, Unboxing


这确实是人为的,但它节省了大量的人工。

您的ArrayList是否使用泛型?列表中存储的类型是什么?是整数吗?obj的类型是另一个数据包“GSE_数据包”。我的arraylist不是泛型的,是的,它存储所有数据包integers@Kam,顺便说一句,您可能需要重命名变量obj,这是一个可怕的名称。根据您提供的信息,我建议使用“packet”。您的ArrayList是否使用泛型?列表中存储的类型是什么?是整数吗?obj的类型是另一个数据包“GSE_数据包”。我的arraylist不是泛型的,是的,它存储所有数据包integers@Kam,顺便说一句,您可能需要重命名变量obj,这是一个可怕的名称。根据您提供的信息,我建议使用“packet”。如果有其他类型,如boolean和long…,我如何进行转换?使用long,您可以执行完全相同的操作,即((long)obj.XYZ.get(t)).intValue()或((long)obj.XYZ.get(t)).longValue(),具体取决于您要转换为的类型。Boolean虽然没有int转换方法,所以您可以尝试((Boolean)obj.XYZ.get(t)).booleanValue()?1:0如果我有其他类型,例如Boolean和long…,我如何进行强制转换?好的-使用long,您可以执行完全相同的操作,即((long)obj.XYZ.get(t)).intValue()或((long)obj.XYZ.get(t)).longValue(),具体取决于您要转换为的类型。Boolean虽然没有int转换方法,所以您可以尝试((Boolean)obj.XYZ.get(t)).booleanValue()?1:0如果我有其他类型,如Boolean和long,如何进行强制转换?同样的模式适用,((Boolean)obj.get(b)).booleanValue(),((long)obj.get(l)).longValue(),如果我有其他类型,比如boolean和long,我可以怎么强制转换呢?同样的模式也适用,((boolean)obj.get(b)).booleanValue(),((long)obj.get(l)).longValue(),等等。这里的附加条件是Java 5或6正在使用中,但现在几乎总是这样。是的,即使是我工作的一个长期运行的web应用程序也已经升级到Java 5。这里的附加条件是Java 5或6正在使用