【问题标题】:Convert or Cast a Simple Object to Object of another class将简单对象转换或转换为另一个类的对象
【发布时间】:2011-08-31 11:39:39
【问题描述】:

我有一个对象 pObject

Object pObject = someRpcCall();

不知道pObject的类型

我所知道的是System.out.println(pObject.toString()) 输出

{partner_shipping_id=12, partner_order_id=11, user_id=1, partner_invoice_id=13, pricelist_id=1, fiscal_position=false, payment_term=false}

如何将此 pObject 转换为以下类的对象

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
        }

    };

}

【问题讨论】:

  • pObject是哪个类的对象,是否也实现了parcelabel接口。
  • @AndroidMirza 请查看更新后的问题
  • 没有准确的描述。请解释清楚你需要什么?

标签: java android object casting


【解决方案1】:

System.out.println(pObject.getClass().getName()); 的输出是什么

如果它是相同的 Customer 类,那么您可以像这样投射对象

Customer cust = (Customer) pObject;

【讨论】:

  • pObject.getClass().getName() 产生java.util.HashMap
  • 在这种情况下,您需要遍历所有键/值对并显式设置值。在某个地方会有某种映射可以让你自动化它,但如果你没有像这样使用它:HashMap hashMap = (HashMap) pObject; Customer customer = new Customer(); customer.setId(hashMap.get("partner_shipping_id")); 但通常最好避免这种硬编码,除非你别无选择。
  • System.out.println(pObject.getClass().getName())tip 真的帮助了我,所以接受你的回答
  • @RajeevSreedharan :我对此有疑问:是否可以执行以下操作 Class<pObject.getClass()> someObj=(pObject.getClass()) pObject ,我希望将对象动态转换回其类,无论它是哪个类。
  • @user7185318 对象不需要转换,引用需要。在编译时无法进行动态转换。 pObject.getClass() 会给你一个Class。泛型调用最好通过反射来实现。
【解决方案2】:

上面的问题已经给出了答案,但是我有一个通用的解决方案,想和大家分享一下。

  1. 首先,使用 Object 对象(提供)获取类名
  2. 使用 Enum 知道类名
  3. 创建已知类的引用对象
  4. 初始化您的 Object 类对象

例如:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 2021-08-14
    • 2013-09-18
    • 2021-10-30
    • 2017-10-15
    • 2015-09-03
    • 2021-07-15
    相关资源
    最近更新 更多