在我的一些代码中,我遇到了错误:预览功能隐式声明的类和实例主要方法仅适用于源级别 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#)。
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 组合在一起,但是,这就是计划)。这解释了奇怪的错误消息。