为什么eclipse不能使用Java17新增的模式匹配

Java17新增的模式匹配
和学习视频中一模一样:

img

代码如下:

class Shape1 {
    
}

class Rectangle extends Shape1 {
    
}

class Triangle extends Shape1 {
    private double area;

    public Triangle(double area) {
        this.area = area;
    }
    
}

public class Switch模式匹配 {
    public static void test(Shape1 shape) {
        switch (shape) {
            case Rectangle rect -> System.out.println("矩形");
            case Triangle tri -> System.out.println("三角形");
            default -> System.out.println("其他形状");
        }
    }
    
    public static void test2(Shape1 shape) {
        //当switch变量是Shape类型时,此时只可能是模式匹配的switch
        switch (shape) {
            case Rectangle rect : 
                System.out.println("矩形");
                break;
            case Triangle tri : 
                System.out.println("三角形");
                break;
            default : 
                System.out.println("其他形状");
        }
    }
    public static void main(String[] args) {
        test(new Rectangle());
    }
}

代码爆红:

img


报错如下:

img

Java版本已经是17

img

升级你的 eclipse版本吧, 开发工具不支持

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7803770
  • 这篇博客也不错, 你可以看下零基础学Java:Java开发工具 Eclipse 安装,创建第一个Java项目,以及Eclipse的一些基础使用
  • 您还可以看一下 机工社华章IT老师的Java安全编码规则:Java串行化课程中的 Java安全编码规则:引言小节, 巩固相关知识点
  • 除此之外, 这篇博客: 第一次使用Eclipse:编写简单的Java小程序中的 4. 编写代码 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    知道为什么不用前面为什么不勾选public static void main(String[] args) 这个选项吗?因为我们需要手打一次认识各部分的含义。(仅作了解即可。)
    为了方便看,我将解释做成了下面这张图片:
    在这里插入图片描述
    在输入代码前请记住,除了引号内的内容,其余全部代码和标点符号都是英文状态下的,切记,不然一定报错。
    因为怕输错,这里还是附上具体的代码。

    public static void main(String[] args) {
    		
    	}
    

    这段代码是放在原来的一对大括号内的,表示这段代码是在类的范围内的,即,{}就是对范围的修饰。


    public 权限修饰符,表示当前的类可以被其他任意类访问
    class 表示当前的文件是个类文件
    HelloWorld 表示的是类的名称
    {}表示当前类的范围
    static 表示静态
    void 表示返回值类型为无返回值
    () 表示输入的内容
    string 表示字符串
    []表示一系列的数
    args 表示参数
    “” 表示字符串,被双引号修饰的内容称为字符串,其中的内容照样输出。


    下面步入我们的重头戏,输出HelloWorld

    System.out.println("Hello World");
    

    注意:这个输出语句的首字母是大写的,两个英文句号都是表示调用的意思,表示System类下调用out属性,再调用out属性下的println方法。后面学面对对象是会详细介绍。句子结尾还需要用英文分号“;”进行表示结束,如果你发现你输入的语句报错,那么先检查一下标点符号是否错误和结束的分号有没有缺失,很多时候的报错都是这两个原因。
    在这里额外提及,输出语句有输出并换行

    System.out.println("输出语句并强制回车换行");
    

    与仅输出不换行两种

    System.out.print("输出语句但不换行");
    

    我们可以依据这两种不同的输出语句去输出诸多有趣的图形
    这就是所有代码都输入后的效果图啦:
    在这里插入图片描述


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^