Syntax error on token ".", @ expected after this token - Syntax error, insert "SimpleName" to compl

本文记录了一次编程过程中因未定义主函数而导致的编译错误经历,并分享了具体的错误提示信息,帮助读者理解此类问题及其解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天写东西的时候突然出现这个。

Multiple markers at this line
    - Syntax error on token ".", @ expected after this token
    - Syntax error, insert "SimpleName" to complete
     QualifiedName
    - Syntax error, insert "Identifier (" to complete
     MethodHeaderName
    - Syntax error, insert ")" to complete MethodDeclaration

后来仔细看了一下,竟然没有写主函数。好尴尬吖~~~~

另外出现这类问题有各种各样的原因,这只是其中一种,吃瓜群众都搜搜其他的原因。

<think>嗯,用户现在遇到了一个Java语法错误,错误信息是“Syntax error on token "Supply", ( expected after this token”。这个错误通常出现在代码中某个地方语法不正确,导致编译器无法正确解析。我需要帮助用户找出问题所在,并提供解决方案。 首先,回顾用户之前的问题,他们之前在使用Lambda表达式对列表进行排序时遇到了问题。现在新的错误提示是关于“Supply”这个符号的语法错误,提示在标记“Supply”之后应该有一个左括号“(”。这说明在代码中某个地方,当编译器遇到“Supply”时,它期望后面跟着一个括号,但实际没有,所以报错了。 可能的原因有几个: 1. **Lambda参数类型声明的位置错误**:用户可能在Lambda表达式中错误地声明了参数类型。例如,在Lambda表达式的参数列表中,如果用户显式指定了参数类型,但没有用括号括起来多个参数,就会导致这个错误。Lambda表达式的参数如果显式指定类型,并且有多个参数,必须用括号括起来。 2. **方法调用或构造函数参数缺失括号**:可能在使用“Supply”类时,比如创建对象或者调用方法时,忘记加括号,导致编译器认为后面应该有括号。 3. **泛型类型参数的使用错误**:如果用户在使用泛型时,比如在List<Supply>中,可能漏掉了必要的括号或尖括号,导致编译器无法识别。 4. **拼写错误或作用域问题**:可能用户错误地拼写了类名,或者类“Supply”在当前作用域中不可见,比如没有正确的导入语句或者类名错误。 接下来需要具体分析用户提供的代码段。用户给出的代码是: matchedSupplies.sort((s1, s2) -> { int priority1 = getSupplyPriority(s1, demand); int priority2 = getSupplyPriority(s2, demand); return Integer.compare(priority1, priority2); }); 用户可能在尝试修复之前的错误时,修改了Lambda表达式的参数列表,添加了类型声明,但可能没有正确使用括号。例如,用户可能将参数从(s1, s2)改为(Supply s1, Supply s2),但可能漏掉了括号,导致语法错误。 假设用户修改后的代码是这样的: matchedSupplies.sort(Supply s1, Supply s2 -> { ... }); 这种情况下,参数列表中的类型声明需要用括号括起来,正确的写法应该是: matchedSupplies.sort((Supply s1, Supply s2) -> { ... }); 如果用户遗漏了括号,就会导致“Syntax error on token "Supply", ( expected”的错误。因为编译器在遇到第一个参数类型“Supply”时,期望后面有一个括号来包裹参数列表,但实际上没有,所以报错。 另一个可能性是用户在泛型中使用Supply时没有正确闭合尖括号,或者在某个地方错误地使用了尖括号,导致编译器误解析。例如,在声明List时可能写成List<Supply>,但如果存在嵌套泛型或遗漏了闭合,可能会引发问题。 此外,检查是否有拼写错误或类名是否正确导入。例如,如果Supply类所在的包没有正确导入,或者类名拼写错误(比如写成了Suplly),也会导致编译器无法识别,从而可能引发类似的错误,但此时错误提示通常是“Supply cannot be resolved to a type”。而当前的错误是关于语法错误,所以更可能是语法结构的问题。 因此,最可能的情况是用户在Lambda表达式的参数列表中显式声明了类型,但未将参数列表用括号括起来。例如,用户可能尝试将(s1, s2)改为Supply s1, Supply s2而没有括号,导致编译器在遇到第一个Supply时期望一个括号。 解决方案是检查Lambda表达式的参数列表,确保当显式声明参数类型时,多个参数必须用括号括起来。例如: 错误写法: matchedSupplies.sort(Supply s1, Supply s2 -> { ... }); 正确写法: matchedSupplies.sort((Supply s1, Supply s2) -> { ... }); 另外,如果用户在使用Lambda表达式时,参数列表为空或只有一个参数,是否需要括号的情况不同,但在此例中是两个参数,必须使用括号。 总结,用户需要检查Lambda表达式中的参数列表是否正确使用括号包裹,特别是当显式声明参数类型时。</think>$\texttt{Syntax error on token "Supply", ( expected}$ 错误通常由以下两种原因导致,请按优先级排查: --- **1. Lambda参数类型声明缺少括号** **错误写法**: ```java matchedSupplies.sort(Supply s1, Supply s2 -> { ... }); // ❌ 缺少参数列表括号 ``` **正确写法**: ```java matchedSupplies.sort((Supply s1, Supply s2) -> { ... }); // ✅ 用()包裹参数列表 ``` **核心规则**: 当Lambda表达式显式声明参数类型时,即使只有一个参数也必须用括号包裹,多参数场景更必须遵守该规则 --- **2. 泛型类型声明冲突** **错误场景**: ```java List<Supply<Item>> matchedSupplies = ...; // 嵌套泛型 matchedSupplies.sort(Supply<Item> s1, ...); // ❌ 错误位置声明泛型 ``` **正确处理**: ```java // 在Lambda参数中不需要重复声明泛型 matchedSupplies.sort((s1, s2) -> { ... }); // ✅ 自动类型推断 // 或显式声明时保持简洁 matchedSupplies.sort((Supply s1, Supply s2) -> { ... }); // ✅ 忽略泛型参数 ``` --- **完整修正示例** ```java // 假设列表类型为 List<Supply> matchedSupplies.sort((Supply s1, Supply s2) -> { // ✅ 正确括号包裹 int priority1 = getSupplyPriority(s1, demand); int priority2 = getSupplyPriority(s2, demand); return Integer.compare(priority1, priority2); }); ``` --- **其他关联检查** - 检查$\texttt{Supply}$类是否已正确导入(非JDK内置类需手动import) - 确认没有在错误的位置使用尖括号(如$\texttt{new Supply<>()}$)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值