Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将简单对象转换或强制转换为另一个类的对象_Java_Android_Object_Casting - Fatal编程技术网

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;
    }