我有以下Vector
,在运行时我想传递Integer
,Character
或Float
:
public static Vector<Object> interestingValues = new Vector<Object>();
与此同时,我希望从中获得Integer
,Float
或Character
,因此有两件事:
他们是否会在Integer
Float
中保留特定的Character
/ Object
/ Vector
类型,否则它们都将保存在形式为Object
?
如何从此Integer
检索Vector
个对象?
答案 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;
}
但这不是一个好的设计。您可能需要考虑将对象存储在不同的向量中,或者使用汇总表示(例如字符串)以及转换。
编辑:
由于Float
,Integer
等都延伸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(); } }
警告经纪人:我没有编译上面的代码。