首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Eclipse:未定义的构造函数

Eclipse:未定义的构造函数
EN

Stack Overflow用户
提问于 2016-05-19 00:25:25
回答 2查看 3.2K关注 0票数 0

编辑3:已解决:见msandiford下面的答案和我的答案.

我的java程序中有一个非常奇怪的问题,我正在Eclipse中开发。我正在创建一个类型为"Population“的对象,在这里使用以下一行:

代码语言:javascript
运行
复制
Population population = new Population(1000, 68, 100, (Individual a, Individual b) -> {}, (Individual ind) -> {}, (Individual ind) -> {});

这导致Eclipse检测到一个错误:

代码语言:javascript
运行
复制
The constructor Population(int, int, int, CrossOver, Mutate, (Individual ind) -> {}) is undefined

然后Eclipse建议创建一个新的构造函数作为错误的解决方案:

代码语言:javascript
运行
复制
Create constructor 'Population(int, int, int, Crossover, Mutate, Fitness);

如果我单击快速修复程序,Eclipse就会生成这个构造函数:

代码语言:javascript
运行
复制
public Population(int size2, int chromosomeLength2, int generations2, CrossOver crossOver2, Mutate mutate2,
        Fitness fitness2) {...}

它具有与原始构造函数相同的签名,它说它是不正确的:

代码语言:javascript
运行
复制
public Population(int size, int chromosomeLength, int generations, CrossOver crossOver, Mutate mutate, Fitness fitness) {...}

我不明白为什么会发生这种情况,因为Eclipse根据我试图传递的参数清楚地检测出正确的构造函数中需要哪些参数,但是它没有检测到我使用的构造函数与它建议使用的构造函数相同。因此,我不知道如何删除此错误,因为它似乎没有(我自己的)错误。

此外,这里还使用了三个接口,以防您希望看到它们(它们每个都有自己的文件):

代码语言:javascript
运行
复制
public interface CrossOver {
    public void crossOver(Individual a, Individual b);
}

public interface Mutate {
    public void mutate(Individual a);
}

public interface Fitness {
    public double getFitness(Individual ind);
}

编辑1:我可能只是眼睛不好,但是在这篇文章顶部的第一段代码中,第二个lambda表达式的"ind“参数看起来似乎与第三个表达式中的那个略有不同。我不确定这在显示Eclipse是如何解释参数方面是否有意义。

编辑2:实际上,当我复制文本时,我可能刚刚在第二个表达式中选择了这个。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-19 00:33:24

最后一个lambda参数与Fitness不匹配,因为它不返回值。

尝试:

代码语言:javascript
运行
复制
Population population = new Population(1000, 68, 100,
    (Individual a, Individual b) -> {}, (Individual ind) -> {}, (Individual ind) -> 0.0);

这些类型也不是绝对必要的,因此您可以使用:

代码语言:javascript
运行
复制
Population population = new Population(1000, 68, 100, (a, b) -> {}, ind -> {}, ind -> 0.0);
票数 2
EN

Stack Overflow用户

发布于 2016-05-19 00:48:46

msandiford的帮助下,我发现了错误的原因。

所发生的事情是:我忘记声明在第三个lambda表达式的返回语句中使用的变量。这导致构造函数出现一个错误,该构造函数表示它是未定义的,然后该构造函数掩盖了返回语句错误。因此,我从未想过彻底检查返回语句,因为它说错误是构造函数的一部分,从远处看返回语句看起来很好。

最后,我想我了解了Eclipse错误有时如何掩盖作为源的错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37312077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档