繁体   English   中英

在Java中传递动态类对象

[英]Passing dynamic class objects in Java

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

我的用例是这样的,

我有一个公共网络类,它根据给定的类型执行网络操作,然后将响应转换为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类接收动态对象。

例如

@Override
 public void success(Object requestedObject) {

 AuthToken authToken = (AuthToken) requestedObject;

}

要么

@Override
 public void success(Object requestedObject) {

 Login login = (Login) requestedObject;

}

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

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

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

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

如果你的success不会收到除AuthTokenLogin任何其他内容,或者其他任何东西,以后类型的数量不会增长,我建议你制作重载方法来强制实现更好的类型安全,如下所示:

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

看看给定的非常有限的上下文,我猜上面的条件适用,所以方法重载将是你最好的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM