如何从Java中的Object Vector获取特定类型对象

时间:2011-04-21 12:36:10

标签: java object vector floating-point integer

我有以下Vector,在运行时我想传递IntegerCharacterFloat

public static Vector<Object> interestingValues = new Vector<Object>();

与此同时,我希望从中获得IntegerFloatCharacter,因此有两件事:

  • 他们是否会在Integer Float中保留特定的Character / Object / Vector类型,否则它们都将保存在形式为Object

  • 如何从此Integer检索Vector个对象?

6 个答案:

答案 0 :(得分:2)

铸造:

Integer i=(Integer)interestingValues.get(0);

如果您在Vector中有多种类型的对象,您可以使用instanceof检查类型:

Object o=interestingValues.get(0);
 if (o instanceof Integer){
      Integer i=(Integer)o;
 }else if (o instanceof Long){
      Long l=(Long)o;
 }

你可以采取的第三件事是避免将ov对象转换为特定类型,而是使用键入的Vector

Vector <Integer> integerVector=new Vector<Integer>();
integerVector.add(Integer.MAX_VALUE);
Integer i=integerVector.get(0);

答案 1 :(得分:1)

尝试使用instanceof和cast:

if(interestingValues.get(0) instanceof Integer){
Integer value = (Integer) interestingValues.get(0);
}

答案 2 :(得分:0)

Vector仅将引用存储到对象,而不是对象本身。

但是,由于(非泛型)类被定义为存储对Object的引用,因此在使用它们之前必须将存储的引用强制转换回原始类型:

String s = (String)myVector.get(n);

这当然要求您事先知道哪个特定类型存储在哪个元素中......

你可以这样做:

Object o = myVector.get(n);
if (o instance String) {
    // do string stuff
} else if (o instanceof Integer) {
    // do integer stuff
} etc 

答案 3 :(得分:0)

您必须迭代并检查Integer个实例,例如:

List<Integer> integers = new ArrayList<Integer>();
for (Object object:interestingValues) {
  if (object instanceof Integer)
     integers.add((Integer) object);
}

答案 4 :(得分:0)

你必须检查对象的类:

Object obj = myvector.get(0);
if( obj instanceof Integer) {
 Integer myInt = (Integer)obj;  
}
else if( obj instanceof Character ) {
  Integer myChar = (Character)obj; 
}

但这不是一个好的设计。您可能需要考虑将对象存储在不同的向量中,或者使用汇总表示(例如字符串)以及转换。

编辑:

由于FloatInteger等都延伸Number,您可能只需检查obj instanceof Number,然后致电intValue()doubleValue()如果您需要的只是数字而不是类型,则在铸造对象上等。

答案 5 :(得分:0)

instanceof检查“isa”的关联。如果您想100%确定该类,请使用getClass()。这是一个冗长的例子:

public class Blue
{
  private String yargh;

  public Blue()
  {
    yargh = "blue";
  }

  public Blue(final String value)
  {
    yargh = StringUtils.defaultString(value);
  }

  public void println()
  {
    System.out.println(yargh);
  }
}

public class Berry extends Blue
{
  public Berry()
  {
    super("blueberry");
  }
}

... blah blah blah
Vector<Object> stuff = new ... blah blah blah
stuff.add(new blue());
stuff.add(new berry());

Iterator<Object> iterator = stuff.iterator();
Object minemine;

// this calls println on two objects.
while (iterator.hasNext())
{
  minemine = iterator.next();
  if (minemine instanceof Blue)
  {
    Blue bluemine = (Blue)minemine;
    bluemine.println();
  }
}

// This calls println for the Blue object, but not the Berry object.
iterator = stuff.iterator();
while (iterator.hasNext())
{
  minemine = iterator.next();
  if (minemine.getClass() == Blue.class)
  {
    Blue bluemine= (Berry)minemine;
    bluemine.println();
  }
}

警告经纪人:我没有编译上面的代码。