gpt4 book ai didi

java - 转换为间接子类

转载 作者:行者123 更新时间:2023-12-01 11:43:16 25 4
gpt4 key购买 nike

我一直在使用 Google Drive api,但很难理解为什么我无法将 Result 转换为 DriveFolder.DriveFolderResult。在 documentation DriveFolder.DriveFolderResultResult 的间接已知子类,但是当我尝试将 Result 转换为 DriveFolder.DriveFolderResult 时,我获取异常,

`java.lang.ClassCastException: com.google.android.gms.drive.internal.v$e cannot be cast to com.google.android.gms.drive.DriveApi$DriveIdResult`

为什么会发生这种情况?由于 DriveFolder.DriveFolderResult 是一个间接已知子类,我不应该能够将其转换为“Result”吗?

为了帮助你们,我在下面粘贴了一些代码。这直接取自here 。为什么这段代码会起作用?如何实现 ResultCallback 接口(interface)以返回 DriveFolder.DriveFolderResult?对我来说最好的解决方案是让一个类实现 ResultCallback,让方法 onResult 返回一些具有方法 getStatus() 的对象,并且然后我可以将其转换为我想要的任何间接子类。这可能吗?

ResultCallback<DriveFolderResult> folderCreatedCallback = new
ResultCallback<DriveFolderResult>() {
@Override
public void onResult(DriveFolderResult result) {
if (!result.getStatus().isSuccess()) {
showMessage("Error while trying to create the folder");
return;
}
showMessage("Created a folder: " + result.getDriveFolder().getDriveId());
}
}

这也是我的类,我的 IDE 告诉我,onResult(R) 从未被声明,但我在类中有该方法。为什么会发生这种情况?为什么上面的示例可以返回 DriveFolder.DriveFolderResult 而我的类却不能?

public class CustomDriveResultCallback implements ResultCallback {

private final ICustomCallback _customCallback;
private final CustomCallbackId _customCallbackId;

public CustomDriveResultCallback(ICustomCallback customCallback, CustomCallbackId customCallbackId){
_customCallback = customCallback;
_customCallbackId = customCallbackId;
}

/**
* Attempts to resolve the issue and callsback to the driveCallbackHandler if it fails or throws an exception
* https://developer.android.com/reference/com/google/android/gms/common/api/CommonStatusCodes.html
* @param result
*/
public void onResult(DriveFolder.DriveFolderResult result) {
if(result.getStatus().isSuccess()){
_customCallback.successCustomCallback(_customCallbackId, result);
}else{
_customCallback.failedCustomCallback(_customCallbackId, result);
}

}
}

最佳答案

只有当相关对象实际上是该子类或继承树中更低级别的实例时,才可以转换为子类。

例如,假设您有以下类(class):

class A {}
class B extends A {}
class C extends B {}

如果您有类型 A 的引用,而它实际上是 B 的实例,则可以将其强制转换为 B,但不能强制转换为 C。

同样,如果您有:

class A {}
class B extends A {}
class C extends A {}

如果对象实际上是 B 的实例,您仍然可以将类型 A 的引用转换为类型 B 的引用,但不能将其转换为 C。这可能就是您想要做的。

查看类似的问题:Typical Hierarchical inheritance in Java

关于java - 转换为间接子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29337876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com