编辑3:已解决:见msandiford下面的答案和我的答案.
我的java程序中有一个非常奇怪的问题,我正在Eclipse中开发。我正在创建一个类型为"Population“的对象,在这里使用以下一行:
Population population = new Population(1000, 68, 100, (Individual a, Individual b) -> {}, (Individual ind) -> {}, (Individual ind) -> {});这导致Eclipse检测到一个错误:
The constructor Population(int, int, int, CrossOver, Mutate, (Individual ind) -> {}) is undefined然后Eclipse建议创建一个新的构造函数作为错误的解决方案:
Create constructor 'Population(int, int, int, Crossover, Mutate, Fitness);如果我单击快速修复程序,Eclipse就会生成这个构造函数:
public Population(int size2, int chromosomeLength2, int generations2, CrossOver crossOver2, Mutate mutate2,
Fitness fitness2) {...}它具有与原始构造函数相同的签名,它说它是不正确的:
public Population(int size, int chromosomeLength, int generations, CrossOver crossOver, Mutate mutate, Fitness fitness) {...}我不明白为什么会发生这种情况,因为Eclipse根据我试图传递的参数清楚地检测出正确的构造函数中需要哪些参数,但是它没有检测到我使用的构造函数与它建议使用的构造函数相同。因此,我不知道如何删除此错误,因为它似乎没有(我自己的)错误。
此外,这里还使用了三个接口,以防您希望看到它们(它们每个都有自己的文件):
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:实际上,当我复制文本时,我可能刚刚在第二个表达式中选择了这个。
发布于 2016-05-19 00:33:24
最后一个lambda参数与Fitness不匹配,因为它不返回值。
尝试:
Population population = new Population(1000, 68, 100,
(Individual a, Individual b) -> {}, (Individual ind) -> {}, (Individual ind) -> 0.0);这些类型也不是绝对必要的,因此您可以使用:
Population population = new Population(1000, 68, 100, (a, b) -> {}, ind -> {}, ind -> 0.0);发布于 2016-05-19 00:48:46
在msandiford的帮助下,我发现了错误的原因。
所发生的事情是:我忘记声明在第三个lambda表达式的返回语句中使用的变量。这导致构造函数出现一个错误,该构造函数表示它是未定义的,然后该构造函数掩盖了返回语句错误。因此,我从未想过彻底检查返回语句,因为它说错误是构造函数的一部分,从远处看返回语句看起来很好。
最后,我想我了解了Eclipse错误有时如何掩盖作为源的错误。
https://stackoverflow.com/questions/37312077
复制相似问题