java ecj_Java8中的模糊重载是ECJ还是javac?

我有以下类:

import java.util.HashSet;

import java.util.List;

public class OverloadTest extends HashSet> {

private static final long serialVersionUID = 1L;

public OverloadTest(OverloadTest extends T> other) {}

public OverloadTest(HashSet extends T> source) {}

private OverloadTest source;

public void notAmbigious() {

OverloadTest o1 = new OverloadTest(source);

}

public void ambigious() {

OverloadTest o2 = new OverloadTest<>(source);

}

}

这在JDK 7的javac以及eclipse(符合性设置为1.7或1.8)下进行编译.但是,尝试根据JDK 8的javac进行编译时,我会收到以下错误信息:

[ERROR] src/main/java/OverloadTest.java:[18,35] reference to OverloadTest is ambiguous

[ERROR] both constructor OverloadTest(OverloadTest extends T>) in OverloadTest and constructor OverloadTest(java.util.HashSet extends T>) in OverloadTest match

请注意,此错误仅适用于ambigous()方法中的构造函数调用,而不适用于notAmbiguous()方法中的构造函数调用.唯一的区别是,ambiguous()依赖于钻石操作符.

我的问题是:JDK 8中的javac是否正确标记了歧义的解决方法,否则JDK 7中的javac不能捕捉到歧义?根据答案,我需要提交一个JDK错误或一个ecj错误.

在DEA(Digital Evolution Algorithm)使用ECJ(Evolutionary Computation in Java)进行编译时,如果出现java.lang.illegalargumentexception异常,通常表示传递给方法的参数不合法。 java.lang.illegalargumentexception异常是IllegalArgumentException类的子类,它表示非法或不合适的参数。它是运行时异常,意味着在程序执行期间可能会抛出该异常。 要解决这个异常,我们需要检查传递给方法的参数是否符合方法的要求,包括参数的类型、范围或其他限制条件。可以检查以下几个方面: 1. 参数的类型:确保传递给方法的参数的类型与方法定义的参数类型匹配。如果参数类型不匹配,可以尝试将其转换为正确的类型。 2. 参数的范围:如果参数有范围限制,例如必须在特定的范围内(如0到100之间),请确保传递的参数值在合法范围之内。 3. 参数的有效性:如果方法对参数值有其他限制条件(例如非空),请确保传递的参数值满足这些条件。 在使用ECJ编译过程出现java.lang.illegalargumentexception异常时,可以根据异常的具体信息来判断参数的错误位置并进行调试。根据异常堆栈跟踪,可以定位到引发异常的代码行,并检查涉及的参数。 根据这些检查,我们可以修复参数错误,确保传递给方法的参数是合法的。修改后,再次进行编译时就不会再出现java.lang.illegalargumentexception异常了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值