简体   繁体   English

在Java中传递动态类对象

[英]Passing dynamic class objects in Java

What's the best approach to pass dynamic class objects as parameters ? 将动态类对象作为参数传递的最佳方法是什么?

My use case is something like this, 我的用例是这样的,

I have a common network class that performs network operations based on the given type and then converts the response into a pojo class. 我有一个公共网络类,它根据给定的类型执行网络操作,然后将响应转换为pojo类。 Here's a demo, 这是一个演示,

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

Later, I would like to receive the dynamic object from the overriden class. 后来,我想从overriden类接收动态对象。

eg 例如

@Override
 public void success(Object requestedObject) {

 AuthToken authToken = (AuthToken) requestedObject;

}

or 要么

@Override
 public void success(Object requestedObject) {

 Login login = (Login) requestedObject;

}

Is there any way to achieve this in Java? 有没有办法在Java中实现这一点?

I found some similar solutions based on Java Generics and Reflection but I am not sure how to apply it in this context. 我找到了一些基于Java Generics和Reflection的类似解决方案,但我不确定如何在这种情况下应用它。

You could just use the instanceof operator to check the subtype of your Object param: 您可以使用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;
    }
    // ...
}

If your success won't receive anything else than AuthToken or Login , or anything else and in future the number of types won't grow, I suggest you to make overloaded method to enforce better type safety, like this: 如果你的success不会收到除AuthTokenLogin任何其他内容,或者其他任何东西,以后类型的数量不会增长,我建议你制作重载方法来强制实现更好的类型安全,如下所示:

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

Looking at the given very limited context, I guess the above condition applies, so the method overloading will be your best option. 看看给定的非常有限的上下文,我猜上面的条件适用,所以方法重载将是你最好的选择。

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

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