Java 将简单对象转换或强制转换为另一个类的对象
我有一个对象Java 将简单对象转换或强制转换为另一个类的对象,java,android,object,casting,Java,Android,Object,Casting,我有一个对象 Object pObject=somerpcall() 我不知道pObject 我知道的是System.out.println(pObject.toString())outputs {partner_shipping_id=12, partner_order_id=11, user_id=1, partner_invoice_id=13, pricelist_id=1, fiscal_position=false, payment_term=false} 如何将此POObject
Object pObject=somerpcall()代码>
我不知道pObject
我知道的是System.out.println(pObject.toString())
outputs
{partner_shipping_id=12, partner_order_id=11, user_id=1, partner_invoice_id=13, pricelist_id=1, fiscal_position=false, payment_term=false}
如何将此POObject转换为以下类的对象
import android.os.Parcel;
import android.os.Parcelable;
public class Customer implements Parcelable {
private int id;
private String name = "";
public Customer() {
// TODO Auto-generated constructor stub
}
/**
* This will be used only by the MyCreator
*
* @param source
*/
public Customer(Parcel source) {
/*
* Reconstruct from the Parcel
*/
id = source.readInt();
name = source.readString();
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return this.id;
}
public String getName() {
return this.name;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(id);
dest.writeString(name);
}
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
@Override
public Customer createFromParcel(Parcel source) {
return new Customer(source);
}
@Override
public Customer[] newArray(int size) {
return new Customer[size];
// TODO Auto-generated method stub
}
};
}
System.out.println(pObject.getClass().getName())的输出是什么代码>
如果它是相同的Customer
类,那么可以像这样强制转换对象
客户客户=(客户)对象代码>提供了上述问题的答案,但我有一个通用解决方案,我想与大家分享
首先,使用Object(提供的)获取类名
使用Enum知道类名
创建已知类的引用对象
初始化对象类对象
e、 g:
pObject是哪个类的对象,它是否也实现了parcelabel接口。@AndroidMirza请查看更新的问题没有精确的描述。请清楚地了解您需要什么?pObject.getClass().getName()
产生java.util.HashMap
在这种情况下,您需要迭代所有键/值对,并明确设置值。在某个地方可能会有某种映射,您可以通过它实现自动化,但如果您没有这样使用它:HashMap HashMap=(HashMap)pObject;客户=新客户();customer.setId(hashMap.get(“partner_shipping_id”)
但通常最好避免这种硬编码,除非您别无选择。System.out.println(pObject.getClass().getName())
提示确实帮助了我,所以接受您的建议answer@RajeevSreedharan当前位置我有一个问题:是否可能执行以下类someObj=(pObject.getClass())pObject
,Id希望动态地将对象转换回其类,无论它是哪个类。@user7185318对象不需要转换,引用需要转换。动态强制转换在编译时是不可能的pObject.getClass()
将返回一个Class
。一般调用最好通过反射实现。
package com.currentobject;
import com.currentobject.model.A;
import com.currentobject.model.B;
import com.currentobject.model.C;
Class CurrentObject{
public void objectProvider(Object object){
String className = object.getClass().getCanonicalName();
ModelclassName modelclass = ModelclassName.getOperationalName(className);
switch (modelclass) {
case A:
A a = (A) object;
break;
case B:
B b = (B) object;
break;
case C:
C c = (C) object;
break;
}
}
}
enum ModelclassName {
A("com.currentobject.model.A"),
B("com.currentobject.model.B"),
C("com.currentobject.model.C");
private ModelclassName(String name) {
this.name = name;
}
public static ModelclassName getOperationalName(final String operationName) {
for(ModelclassName oprname :ModelclassName.values()) {
if(oprname.name.equalsIgnoreCase(operationName)){
return oprname ;
}
}
return null;
}
String name;
}