gpt4 book ai didi

java - ATG - 覆盖方法并返回更具体的组件

转载 作者:行者123 更新时间:2023-11-29 04:33:11 25 4
gpt4 key购买 nike

我正在尝试覆盖某些方法以让它返回更具体的结果。所以我做到了。

@Override
public StoreProfile getProfile() {
return (StoreProfile)super.getProfile();
}

但是,super.getProfile() 方法在被覆盖时总是返回 null。

我的环境具有以下规范。

.\java -version
java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b50)
Dynamic Code Evolution Client VM (build 0.2-b02-internal, 19.0-b04-internal, mixed mode)

已编辑

通过更多测试,我发现这个问题不是 Java 问题。我的项目使用 ATG 10.0.3,当我尝试覆盖一些返回组件(并且只是组件)的方法并将其转换为更具体的类时,就会出现这个问题。

最佳答案

您看到的是协变返回问题的示例,此处解释得很好:https://dzone.com/articles/covariant-return-type-abyssal

您看到的与普通 Java 的区别在于 ATG 使用的是 JavaBeans。如果 JavaBeans 首先加载基类,它会同时看到 get 和 set 方法。如果 JavaBeans 首先加载子类,它会看到一个 getter 但没有相应的 setter(它在类型上不匹配,并且它不在检查基类的规范中)。由于这种依赖性,服务器启动中的微小变化可能会导致空值,您应该始终避免这个问题。

最好的解决办法是让你的子类的 getter 有一个不同的名字。根据您的示例,我将使用:

public StoreProfile getStoreProfile() {
return (StoreProfile) getProfile();
}

关于java - ATG - 覆盖方法并返回更具体的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42954657/

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