在Java中传递动态类对象

时间:2016-07-16 12:11:42

标签: java android retrofit2 okhttp3

将动态类对象作为参数传递的最佳方法是什么?

我的用例是这样的,

我有一个公共网络类,它根据给定的类型执行网络操作,然后将响应转换为pojo类。这是一个演示,

 public abstract class CommonOperations {

     public void getAuthToken() {
     ......
     AuthToken authToken = response.body();
     success(authToken);
    }

     public void performLogin() {
     ......
     Login login = response.body();
     success(login);
    }

    }

 public abstract void success(Object object);

稍后,我想从overriden类接收动态对象。

e.g。

@Override
 public void success(Object requestedObject) {

 AuthToken authToken = (AuthToken) requestedObject;

}

@Override
 public void success(Object requestedObject) {

 Login login = (Login) requestedObject;

}

有没有办法在Java中实现这一点?

我发现了一些基于Java Generics和Reflection的类似解决方案,但我不确定如何在这种情况下应用它。

2 个答案:

答案 0 :(得分:0)

您可以使用instanceof运算符检查Object参数的子类型:

@Override
public void success(Object requestedObject) {
    if(requestedObject instanceof AuthToken) {
        AuthToken authToken = (AuthToken) requestedObject;
    } else if(requestedObject instanceof Login) {
        Login login = (Login) requestedObject;
    }
    // ...
}

答案 1 :(得分:0)

如果您的success赢得了除AuthTokenLogin以外的任何其他内容,或其他任何内容,并且将来类型的数量不会增长,我建议你可以使用重载方法来强制实现更好的类型安全性,如下所示:

public abstract void success(AuthToken at);
public abstract void success(Login l); 
public abstract void success(WhateverElse obj);

考虑给定非常有限的上下文,我猜上述条件适用,因此方法重载将是您的最佳选择。