gpt4 book ai didi

java - 为什么 Eclipse 会编译它,而 javac 不会?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:11:14 25 4
gpt4 key购买 nike

我们有一些单元测试可以在 Eclipse 3.4 中正常编译和运行,但是当我们尝试使用 javac 编译它们时,它会失败。我已经设法将代码缩减为一些小而独立的代码,因此它没有外部依赖性。代码本身没有多大意义,因为它完全脱离了上下文,但这并不重要——我只需要找出为什么 javac 不喜欢这样:

public class Test {

public void test() {
matchOn(someMatcher().with(anotherMatcher()));
}

void matchOn(SubMatcher matcher) {}

SubMatcher someMatcher() {
return new SubMatcher();
}

Matcher anotherMatcher() {
return null;
}
}

interface Matcher <U, T> {}

class BaseMatcher implements Matcher {
public BaseMatcher with(Matcher<?,?> matcher) {
return this;
}
}

class SubMatcher extends BaseMatcher {
@Override
public SubMatcher with(Matcher matcher) {
return this;
}
}

我已经尝试使用 JDK 1.5.0_101.6.0_13,结果相同:

Test.java:6: matchOn(test.SubMatcher) in test.Test cannot be applied to (test.BaseMatcher)
matchOn(someMatcher().with(anotherMatcher()));
^
1 error

我认为这是完全有效的 Java。 SubMatcher.with() 方法返回的类型比BaseMatcher.with() 更具体,但编译器似乎认为返回类型是BaseMatcher。但是,Eclipse 编译器可能错误地允许了一些不应该允许的事情。

有什么想法吗?

最佳答案

在 BaseMatcher 中你需要指定类型参数:

public SubMatcher with(Matcher<?, ?> matcher) {

为了让javac匹配你的with方法

附言

恕我直言,这是eclipse编译器的一个bug

关于java - 为什么 Eclipse 会编译它,而 javac 不会?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1176799/

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