Java代码报“.class expected”等三类编译错误如何解决?
问题根因
所有报错均来源于createNewProfile方法中实例化Skills类的语法错误:Java 不支持在构造方法传参时声明参数类型,也不支持参数名: 值的命名参数传参写法,你用到的是其他编程语言(比如Python、Kotlin)的语法,不符合Java规范。
对应报错解释
- 报错1
.class expected:你在传参位置写了int points这类类型声明,编译器误以为你要在此处定义变量,而方法传参位置不允许定义新变量,触发该报错 - 报错2「冒号应替换为分号」:Java语法中没有
参数名: 值的传参写法,编译器识别到冒号后认为是非法符号,提示你替换为语句结束的分号 - 报错3
10 is not a statement:错误的语法拆分导致编译器把数值10识别为了独立语句,Java不允许单独的字面量作为可执行语句,触发该报错
修复方案
你只需要按照Skills类构造方法定义的参数顺序,直接传入对应数值即可,不需要写参数类型和参数名。
假设你Skills类的构造方法参数顺序为(int points, int health, int strength, int defense, int speed, int intelligence),修正后的代码如下:
package PowerSystem.managers; import java.util.UUID; import java.util.Map; import java.util.HashMap; import PowerSystem.components.Skills; import PowerSystem.components.Profile; import PowerSystem.Main; // 注意补充Player类的import,如果Player和当前类不同包必须导入 import 你的Player类所在包路径.Player; public class ProfileManager { private Main main; private Map<UUID, Profile> profiles = new HashMap<>(); public ProfileManager(Main main) { this.main = main; } public Profile createNewProfile(Player player) { // 仅保留传入的数值,顺序和Skills构造方法参数顺序一致即可 Skills skills = new Skills(10, 0, 0, 0, 0, 0); // 如果怕参数顺序搞混可以加注释标注 // Skills skills = new Skills( // 10, // points // 0, // health // 0, // strength // 0, // defense // 0, // speed // 0 // intelligence // ); Profile profile = new Profile(skills); profiles.put(player.getUniqueId(), profile); return profile; } public Profile getPlayerProfile(UUID uuid) { return profiles.get(uuid); } }
如果你的Skills类还没有写对应参数的全参构造方法,需要先在Skills类中补充:
public class Skills { private int points; private int health; private int strength; private int defense; private int speed; private int intelligence; // 补充这个全参构造方法 public Skills(int points, int health, int strength, int defense, int speed, int intelligence) { this.points = points; this.health = health; this.strength = strength; this.defense = defense; this.speed = speed; this.intelligence = intelligence; } // 原有getter、setter、其他代码保留 }
内容的提问来源于stack exchange,提问作者SimplexSon
相关产品推荐
相关产品推荐

