Java新手求助:myMethod方法的放置位置与调用问题
问题解决步骤
核心问题梳理
- 方法嵌套错误:Java不允许在
main方法内部定义另一个方法,你之前注释掉的myMethod放在main里是非法的。 - 方法归属错误:
myMethod的功能是遍历整个Pizza对象列表,属于批量操作,不该放在单个Pizza类中(单个Pizza对象不需要处理整个列表)。 - 大小写敏感问题:Java类名是大小写敏感的,你的类名是
Pizza,但代码里多处用了小写的pizza,会导致“找不到符号”错误。 - 构造方法名错误:
Pizza类的构造方法名写成了小写的pizza,必须和类名完全一致(大写P开头)。
修正后的完整代码
1. CSVToObjectConverter类(包含myMethod)
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class CSVToObjectConverter { // 把myMethod定义为静态方法,放在main外面 public static void myMethod(List<Pizza> pizzaList) { for (int a = 0; a < pizzaList.size(); a++) { System.out.println(pizzaList.get(a).order_id()); } } public static void main(String[] args) { String csvFile = args[0]; String line; // 泛型改为大写Pizza,和类名一致 List<Pizza> pizl = new ArrayList<>(); try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) { while ((line = br.readLine()) != null) { String[] data = line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)"); float pizza_id = Float.parseFloat(data[0]); float order_id = Float.parseFloat(data[1]); String pizza_name_id = data[2]; float quantity = Float.parseFloat(data[3]); String order_date = data[4]; String order_time = data[5]; float unit_price = Float.parseFloat(data[6]); float total_price = Float.parseFloat(data[7]); String pizza_size = data[8]; String pizza_category = data[9]; String pizza_ingredients = data[10]; String pizza_name = data[11]; // 创建对象时用大写Pizza,和类名一致 Pizza pizaA = new Pizza(pizza_id, order_id, pizza_name_id, quantity, order_date, order_time, unit_price, total_price, pizza_size, pizza_category, pizza_ingredients, pizza_name); pizl.add(pizaA); } } catch (IOException e) { e.printStackTrace(); } // 直接调用静态方法myMethod,传入列表 myMethod(pizl); } }
2. Pizza类(修正构造方法名,移除多余的myMethod)
import java.util.List; class Pizza { private float pizza_id; private float order_id; private String pizza_name_id; private float quantity; private String order_date; private String order_time; private float unit_price; private float total_price; private String pizza_size; private String pizza_category; private String pizza_ingredients; private String pizza_name; // 构造方法名改为大写Pizza,和类名一致 public Pizza(float pizza_id, float order_id, String pizza_name_id, float quantity, String order_date, String order_time, float unit_price, float total_price, String pizza_size, String pizza_category, String pizza_ingredients, String pizza_name) { this.pizza_id = pizza_id; this.order_id = order_id; this.pizza_name_id = pizza_name_id; this.quantity = quantity; this.order_date = order_date; this.order_time = order_time; this.unit_price = unit_price; this.total_price = total_price; this.pizza_size = pizza_size; this.pizza_category = pizza_category; this.pizza_ingredients = pizza_ingredients; this.pizza_name = pizza_name; } // 保留所有getter方法 public float pizza_id() { return pizza_id; } public float order_id() { return order_id; } public String pizza_name_id() { return pizza_name_id; } public float quantity() { return quantity; } public String order_date() { return order_date; } public String order_time() { return order_time; } public float unit_price() { return unit_price; } public float total_price() { return total_price; } public String pizza_size() { return pizza_size; } public String pizza_category() { return pizza_category; } public String pizza_ingredients() { return pizza_ingredients; } public String pizza_name() { return pizza_name; } }
关键说明
- 把
myMethod定义为CSVToObjectConverter的静态方法,因为main是静态方法,静态方法可以直接调用同类中的其他静态方法,不需要创建类的实例。 - 所有涉及类名的地方统一用大写
Pizza,解决大小写敏感导致的“找不到符号”错误。 - 移除
Pizza类中的myMethod,因为这个方法是处理整个列表的,不属于单个Pizza对象的职责,遵循单一职责原则。
内容的提问来源于stack exchange,提问作者gonza
相关产品推荐
相关产品推荐

