[英]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
不會收到除AuthToken
或Login
任何其他內容,或者其他任何東西,以后類型的數量不會增長,我建議你制作重載方法來強制實現更好的類型安全,如下所示:
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.