gpt4 book ai didi

java匿名类枚举编译错误

转载 作者:行者123 更新时间:2023-12-02 00:03:11 25 4
gpt4 key购买 nike

我可以解决这个问题,但我无法理解它,所以我要求一些解释(也许还有一个更好的问题标题)。

请考虑这一点:

public class TBGService {
// TBGObject is an abstract base class which is extended by model classes
public <T> T doGet(TBGObject model) throws TBGServiceException {
String uri = model.buildUrl(repository) + model.getObjectKey();
GetMethod method = new GetMethod(uri);
T returned = execute(method, credentials, model.getClass());
return returned;
}
}

还有这个:

public enum TBGTaskAttributes {
private TBGTaskAttributes(String id, String type, String label, Object... flags) {
builder = new TaskAttributeBuilder();
builder.withId(id).withLabel(label);
for (Object flag : flags) {
processFlag(flag);
}
}

public abstract String getValueFromIssue(TBGIssue issue);

public abstract void setValueInIssue(TBGIssue issue, String value);

}

当我编写此代码来定义枚举项时:

PROJECT(TaskAttribute.PRODUCT, TaskAttribute.TYPE_SINGLE_SELECT, "Project", new OptionProvider() {
@Override
public Set<Entry<String, String>> getOptions(TaskRepository repository) {
try {
List<TBGProject> list = TBGService.get(repository)
.doGet(new TBGProjects()).getProjects();
[...]
return map.entrySet();
} catch (TBGServiceException e) { [...] }
return null;
}
}) {
@Override
public String getValueFromIssue(TBGIssue issue) {
return issue.getProjectKey();
}
@Override
public void setValueInIssue(TBGIssue issue, String value) {
issue.setProjectKey(value);
}
},
[... other items ...]

我收到编译器错误(Eclipse 自动完成也不起作用):

The method getProjects() is undefined for the type Object

如果我将鼠标悬停在 doGet 方法上,Eclipse 将显示它的定义如下:

 <Object> Object TBGService.doGet(TBGObject model)

在其他地方,悬停将签名正确显示为:

 <TBGProjects> TBGProjects TBGService.doGet(TBGObject model)

当使用参数new TBGProjects()调用时。

只是改变:

List<TBGProject> list = TBGService.get(repository)
.doGet(new TBGProjects()).getProjects();

与:

TBGProjects projects = TBGService.get(repository).doGet(new TBGProjects());
List<TBGProject> = projects.getProjects();

让它工作。但这里发生了什么?我错过了什么?

最佳答案

Java 根据您指定方法的返回值来推断 T 的类型。

如果您不将返回值分配给任何内容,Java 就不知道 T 应该是什么。

要解决此问题,您可以将参数更改为 T 类型,以便 Java 可以从您传递的参数推断出 T:

public <T extends TBGObject> T doGet(T model) throws TBGServiceException {

关于java匿名类枚举编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14430763/

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