Java 如何动态地强制转换某些内容?
我想通过调用如下内容来动态强制转换某些内容:Java 如何动态地强制转换某些内容?,java,Java,我想通过调用如下内容来动态强制转换某些内容: Object genericObject = new MyObject(); MyObject myObject = getObject(genericObject, MyObject.class); public static final T getObject(Object object, Class<T> clazz){ if(isInstance(object, clazz)){ return objec
Object genericObject = new MyObject();
MyObject myObject = getObject(genericObject, MyObject.class);
public static final T getObject(Object object, Class<T> clazz){
if(isInstance(object, clazz)){
return object;
}
return null;
}
objectgeneriobject=newmyobject();
MyObject MyObject=getObject(genericObject,MyObject.class);
公共静态final T getObject(对象对象,类clazz){
if(isInstance(对象,clazz)){
返回对象;
}
返回null;
}
如何修复getObject()
方法使其工作?您可以使用:
publicstaticfinal T getObject(对象对象,类clazz){
if(类实例(对象)){
返回clazz.cast(对象);
}
返回null;
}
这有什么意义?(MyObject)genericObject
或Class.cast()
有什么问题?可以根据基元/引用数据类型执行检查,并使其更整洁。还可以通过添加
@Mureinik make来注意对方法语法的更改。没有它就无法编译。或者使用return(t)对象代码>---由于类型擦除,方法变为Object getObject(…)
无论如何,调用变为MyObject MyObject=(MyObject)getObject(…)
,因此消除了(T)对象的强制转换,只保留(MyObject)getObject(…)
强制转换。使用clazz.cast(…)
你实际上会施放两次。这不是一个真正的问题,因为施法很快,而且JIT很可能会消除它,但是。。。
public static final <T> T getObject(Object object, Class<T> clazz) {
if(clazz.isInstance(object)) {
return clazz.cast(object);
}
return null;
}