Java 功能仅适用于源代码级别 22 及以上

问题描述 投票:0回答:1

在我的一些代码中,我遇到了错误:预览功能隐式声明的类和实例主要方法仅适用于源级别 22 及以上,这很奇怪,因为我大约一周前才安装了 java,而且它的版本大约是17、我使用的 vscode 到目前为止已经为我支持了 java,但是在对我的一个类进行了一些编码之后,它刚刚出现故障,我的代码在这里,但我不确定它是否对任何人都有用:

import java.util.ArrayList;

public class An {
  String whichA(String text) {
    ArrayList<String> anLetters = new ArrayList<>();
    anLetters.add("a");
    anLetters.add("e");
    anLetters.add("i");
    anLetters.add("o");
    anLetters.add("u");
    Character c0 = text.charAt(0);
    Character c1 = text.charAt(1);
    if ((anLetters.contains(c0.toString().toLowerCase())) || (c0.toString() + c1.toString() == "11")){
      return "an";
    }
    else{
      return "a";
    }
  }

  String whichA(Integer number) {
    ArrayList<String> anLetters = new ArrayList<>();
    anLetters.add("a");
    anLetters.add("e");
    anLetters.add("i");
    anLetters.add("o");
    anLetters.add("u");
    String text = number.toString();
    Character c0 = text.charAt(0);
    Character c1 = text.charAt(1);
    if ((anLetters.contains(c0.toString().toLowerCase())) || (c0.toString() + c1.toString() == "11")){
      return "an";
    }
    else{
      return "a";
    }
  }

  String whichA(Long number) {
    ArrayList<String> anLetters = new ArrayList<>();
    anLetters.add("a");
    anLetters.add("e");
    anLetters.add("i");
    anLetters.add("o");
    anLetters.add("u");
    String text = number.toString();
    Character c0 = text.charAt(0);
    Character c1 = text.charAt(1);
    if ((anLetters.contains(c0.toString().toLowerCase())) || (c0.toString() + c1.toString() == "11")){
      return "an";
    }
    else{
      return "a";
    }
  }

  String whichA(Double number) {
    ArrayList<String> anLetters = new ArrayList<>();
    anLetters.add("a");
    anLetters.add("e");
    anLetters.add("i");
    anLetters.add("o");
    anLetters.add("u");
    String text = number.toString();
    Character c0 = text.charAt(0);
    Character c1 = text.charAt(1);
    if ((anLetters.contains(c0.toString().toLowerCase())) || (c0.toString() + c1.toString() == "11")){
      return "an";
    }
    else{
      return "a";
    }
  }

  String whichA(Float number) {
    ArrayList<String> anLetters = new ArrayList<>();
    anLetters.add("a");
    anLetters.add("e");
    anLetters.add("i");
    anLetters.add("o");
    anLetters.add("u");
    String text = number.toString();
    Character c0 = text.charAt(0);
    Character c1 = text.charAt(1);
    if ((anLetters.contains(c0.toString().toLowerCase())) || (c0.toString() + c1.toString() == "11")){
      return "an";
    }
    else{
      return "a";
    }
  }
  String whichTh(int num) {
    String suffix;
    num = num % 10;
    switch (num) {
      case 1: suffix = "st";
        break;
      case 2: suffix = "nd";
        break;
      case 3: suffix = "rd";
        break;
      default: suffix = "th";
        break;
    }
    return suffix;
  }

  String whichTh(long number) {
    String suffix;
    int num = (int) (number % 10);
    switch (num) {
      case 1: suffix = "st";
        break;
      case 2: suffix = "nd";
        break;
      case 3: suffix = "rd";
        break;
      default: suffix = "th";
        break;
    }
    return suffix;
  }

  String whichTh(float number) {
    String suffix;
    int num = (int) (number % 10);
    switch (num) {
      case 1: suffix = "st";
        break;
      case 2: suffix = "nd";
        break;
      case 3: suffix = "rd";
        break;
      default: suffix = "th";
        break;
    }
    return suffix;
  }

  String whichTh(double number) {
    String suffix;
    int num = (int) (number % 10);
    switch (num) {
      case 1: suffix = "st";
        break;
      case 2: suffix = "nd";
        break;
      case 3: suffix = "rd";
        break;
      default: suffix = "th";
        break;
    }
    return suffix;
  }

  String whichTh(String number) {
    String suffix;
    int num = Integer.parseInt(number) % 10;
    switch (num) {
      case 1: suffix = "st";
        break;
      case 2: suffix = "nd";
        break;
      case 3: suffix = "rd";
        break;
      default: suffix = "th";
        break;
    }
    return suffix;
  }
}

  String convertString(Integer variable){
    return variable.toString();
  }
  String convertString(Long variable){
    return variable.toString();
  }
  String convertString(Double variable){
    return variable.toString();
  }
  String convertString(Float variable){
    return variable.toString();
  }

  int convertInt(String variable) {
    return Integer.parseInt(variable);
  }

  int convertInt(long variable) {
    return (int) variable;
  }

  int convertInt(float variable) {
    return (int) variable;
  }

  int convertInt(double variable) {
    return (int) variable;
  }

  long convertLong(String variable){
    int number = Integer.parseInt(variable);
    return (long) number;
  }

  long convertLong(int variable){
    return (long) variable;
  }

  long convertLong(float variable){
    return (long) variable;
  }

  long convertLong(double variable){
    return (long) variable;
  }

  float convertFloat(String variable){
    int number = Integer.parseInt(variable);
    return (float) number;
  }

  float convertFloat(int variable) {
    return (float) variable;
  }

  float convertFloat(long variable) {
    return (float) variable;
  }

  float convertFloat(double variable) {
    return (float) variable;
  }

  double convertDouble(String variable) {
    int number = Integer.parseInt(variable);
    return (double) number;
  }

  double convertDouble(int variable) {
    return (double) variable;
  }

  double convertDouble(long variable) {
    return (double) variable;
  }

  double convertDouble(float variable) {
    return (double) variable;
  }

我只是在做一些OOP,因为我是java新手,来自python,所以这是一个相当大的调整,但是这个对象的所有目的是帮助解决一些问题,比如知道在单词之前是否要but a或an,是否在数字后添加 st、nd、rd 或 th,以及转换数据类型。在 VScode 上,错误一开始就出现,经过一些测试/调试后,我发现这是我代码底部的数据类型转换。

有谁知道我如何更新java(我使用VScode JavaCodingPack-0.4.1.exe进行java安装),任何其他解决方案或者我是否应该使用像eclipse这样的东西(理想情况下我想坚持使用VScode,因为我使用多种其他编程语言/标记语言/样式器(python、html、css、javascript,我希望将来能学习一些其他语言,例如 C#)。

java visual-studio-code version
1个回答
0
投票

VSCode确实是在java22上运行的。但是,您有一个拼写错误:您的

class An {}
定义的右大括号位于文件的中间,而不是末尾:在
whichTh
convertString
之间。

这意味着

convertString
以及它后面的所有其他方法都存在于空白中:它们不是任何类定义的一部分。

直到java22,那是直截了当的,完全不是java。你不能这样做:“顶层”可以包含包声明、导入语句、注释和类型定义。时期。方法、构造函数和字段必须在类型定义中定义。

在 java22 中,情况仍然如此,但是,将

--preview
扔在那里,现在“只是在空间中声明方法”是允许的,并且暗示它们是隐式未命名类的一部分。所有这一切的目的只是为了让 Java 在学习 Java 的第一个小时变得简单。目的是您可以打开文本编辑器,编写例如: > nano whatever.java void main() { print("Hi there!"); } > java whatever.java Hi there!

这确实是它的工作原理,至少在启用预览的情况下是这样。或者很快就会(这还需要“默认导入的基本模块的所有内容”JEP 和其他一些 JEP 组合在一起,但是,这就是计划)。
这解释了奇怪的错误消息。

© www.soinside.com 2019 - 2024. All rights reserved.