groovy运算符重写

//操作符重载
class Rmb {
    def number

    //重写+
    def plus(o) {
        if (o instanceof Number) {
            new Rmb(number: number + o)
        } else if (o instanceof Rmb) {
            new Rmb(number: number + o.number)
        } else {
            throw new MissingMethodException('plus', Rmb.class, o)
        }
    }

    //重写switch中的case
    def isCase(o) {
        if(o instanceof Rmb){
            o.number = 200
            return true
        }else {
            false
        }
    }
}
//重写 +
def aa = new Rmb(number: 10) + 20
def aaa = new Rmb(number: 10) + new Rmb(number: 30)
println aa.number
println aaa.number
//重写isCase
switch (aa) {
    case new Rmb(number: 10):
        println("是新的${aa.number}")
        break
    case 100:
        println aa.number
        break
}
重载运算符汇总:


<think>好的,我现在需要解决用户在Java编译时遇到的“diamond运算符不被支持”的问题。首先,我得回忆一下diamond运算符是什么。Diamond运算符是在Java 7中引入的,允许在实例化泛型类时省略类型参数,编译器会自动推断类型。例如,原来写List<String> list = new ArrayList<String>();可以简化为List<String> list = new ArrayList<>();这里的<>就是diamond运算符。 用户提到错误信息显示需要使用-source 7或更高版本,说明编译器当前的源版本低于7,可能是用Java 7之前的版本在编译。用户提供的引用信息中提到了使用javac 1.7.0_79,但编译模块时出现错误,可能配置有问题。虽然用户参考了某些文章但未能解决,我需要找出可能的原因和解决方法。 首先,检查项目的编译设置。如果IDE(如IntelliJ或Eclipse)中设置的Java编译器版本不是7或更高,即使安装了JDK 7,也可能因为项目配置错误导致问题。用户需要确认两处设置:项目的语言级别(source level)和目标字节码版本(target)。这两个都需设置为7或更高。 其次,检查构建工具配置。如果使用Maven或Gradle,需要在pom.xml或build.gradle中指定正确的source和target。例如,Maven中配置maven-compiler-plugin的source和target为1.7: ```xml <plugin> <groupId>org.apache.maven.plugin</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> ``` 第三,确认JDK版本是否正确安装并被正确引用。有时候系统环境变量可能指向旧版本的JDK,比如JDK 6。用户需要检查JAVA_HOME和PATH变量,确保指向JDK 7或更高版本。在IDE中,也要检查项目SDK是否设置为正确的JDK版本。 另外,用户的错误信息中提到了内部编译器错误,可能与某些特定代码或编译器bug有关。如果配置正确但仍有问题,可能需要检查代码中是否有其他语法错误,或者尝试清理并重新构建项目。此外,使用@Override注解时,如果方法不符合重写条件,也可能导致错误,但这里的主要问题还是diamond运算符的支持。 如果用户必须使用Java 7以下版本,比如Java 6,那么无法使用diamond运算符,必须显式指定泛型类型参数。但建议升级到至少Java 7,因为Java 6已经停止支持,存在安全风险。 总结解决方案步骤:1. 确认并设置正确的source和target版本;2. 检查构建工具配置;3. 确保使用正确的JDK版本;4. 清理和重建项目;5. 如有必要,升级Java版本或修改代码。</think>### 逐步解答 要解决Java编译错误`diamond运算符不被支持`的问题,需确保编译器版本与代码语法特性兼容。以下是具体步骤: --- ### **1. 确认JDK版本** 首先检查系统中安装的Java版本是否支持diamond运算符(Java 7及以上): ```bash java -version javac -version ``` - 若版本低于1.7,需[下载并安装JDK 7+](https://www.oracle.com/java/technologies/downloads/)。 --- ### **2. 配置编译器参数** 在项目配置中显式指定`-source`和`target`版本为1.7或更高: - **命令行编译**: ```bash javac -source 1.7 -target 1.7 YourFile.java ``` - **Maven配置**(pom.xml): ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugin</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> </build> ``` - **Gradle配置**(build.gradle): ```groovy tasks.withType(JavaCompile) { options.compilerArgs += ['-source', '1.7', '-target', '1.7'] } ``` --- ### **3. 检查IDE设置** 在IDE中(如IntelliJ/Eclipse)需同步配置: 1. **IntelliJ**: - `File > Project Structure > Project Settings > Project`:设置`Project SDK`和`Project language level`为1.7+。 - `File > Settings > Build, Execution, Deployment > Compiler > Java Compiler`:指定目标字节码版本。 2. **Eclipse**: - 右键项目 > `Properties > Java Compiler`:启用1.7+的合规级别。 --- ### **4. 修改代码适配低版本(备用方案)** 若必须使用Java 6或更低版本,需**显式声明泛型类型**,避免使用diamond运算符: ```java // Java 7+允许的语法 List<String> list = new ArrayList<>(); // Java 6及以下需显式声明 List<String> list = new ArrayList<String>(); ``` --- ### **5. 清理并重新构建项目** 配置更新后,清理旧编译文件: - 删除`target/`或`build/`目录。 - 在IDE中执行`Rebuild Project`。 --- ### **原因说明** Diamond运算符是Java 7引入的语法糖,其目的是简化泛型类型声明。编译器需通过`-source 1.7`参数识别该语法,并通过`-target 1.7`生成兼容的字节码。若未正确配置,会触发以下错误: ``` error: diamond operator is not supported in -source 1.6 ``` --- ### **相关问题** 1. 如何检查项目中哪些代码使用了Java 7+特性? 2. Maven多模块项目中如何统一配置编译器版本? 3. Java 8的lambda表达式编译失败应如何解决?[^3] --- 引用[1]: Information:Using javac 1.7.0_79 to compile java sources 引用[2]: [ERROR] Failure executing javac, but could not parse the error 引用[3]: 使用 @Override 注解,可以让编译器帮忙检查是否满足上面的两个限制条件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值