Groovy静态main调用实例方法报MissingMethodException问题求助
问题原因及修复方案
1. 直接触发报错的核心原因
你定义的getWordsFromNumber是类的实例方法,而main是静态方法,静态方法属于类本身,无法直接访问类的实例成员。你直接在main里调用getWordsFromNumber(yourNumber)时,Groovy会默认查找该类的静态同名方法,找不到就会抛出你遇到的MissingMethodException异常。
修复该报错只需要先实例化MyClass对象,再通过实例调用方法即可:
public static void main(String[] args) { int yourNumber = 120 // 先实例化类对象 def myClass = new MyClass() def result = myClass.getWordsFromNumber(yourNumber) println result }
2. 代码存在的其他逻辑问题
修复上述报错后,代码依然无法得到预期结果,还有两处逻辑问题需要调整:
- 循环逻辑错误:
for (i in numDigits)写法不符合需求,numDigits是数字的位数(比如120的位数是3),你需要遍历的是数字的每一位,而非循环位数这个数值本身;且你当前每次给setNumberToWord传参是完整的数字,不是每一位的单独数值。 - 字符串截取逻辑错误:你拼接的字符串末尾是
-,只截掉1位会残留多余的短横和空格,需要截掉最后3位。
3. 完整修复后的参考代码
class MyClass { String numberString String setNumberToWord(int number) { switch (number) { case 0: numberString = "zero" break case 1: numberString = "jeden" break case 2: numberString = "dwa" break case 3: numberString = "trzy" break case 4: numberString = "cztery" break case 5: numberString = "pięć" break case 6: numberString = "sześć" break case 7: numberString = "siedem" break case 8: numberString = "osiem" break case 9: numberString = "dziewięć" break } } String getWordsFromNumber(int number) { // 转换为字符数组遍历每一位数字 def digits = number.toString().chars String result = "" for (char c : digits) { // 字符转数字值 int digit = Integer.parseInt(c.toString()) setNumberToWord(digit) result = result + "$numberString - " } // 截掉末尾多余的" - " result = result.substring(0, result.length() - 3); return result } public static void main(String[] args) { int yourNumber = 120 def myClass = new MyClass() println myClass.getWordsFromNumber(yourNumber) } }
运行后输出结果为:jeden - dwa - zero,符合预期。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

