求助:解决incompatible types: String cannot be converted to int报错
错误原因及修复方案
核心错误分析
报错incompatible types: String cannot be converted to int的直接原因:
Car构造函数第一个参数要求是int类型(对应year属性),但实例化时传入了字符串"2014",类型不匹配。- 代码存在隐性问题:
Cardemo是Car的私有内部类,不能包含静态main方法(私有内部类无法被外部直接访问,静态方法也不能直接访问非静态内部类结构);另外你没有调用display()方法,就算修复类型问题也不会输出结果。
修复方案(两种可选)
方案一:将year属性改为String类型(匹配输入需求)
如果不需要对年份做数值运算,直接用字符串存储更简单:
public class Car { private String year; // 把int类型改为String private String model; private String color; // 构造函数第一个参数同步改为String Car(String yr, String m, String c){ year = yr; model = m; color = c; } public void display() { System.out.println(year + ", " + model + ", " + color); } // 将Cardemo改为public静态内部类,才能正常运行main方法 public static class Cardemo { public static void main(String[] args) { Car car1 = new Car("2014", "SEDAN", "BLACK"); car1.display(); // 调用display方法输出结果 } } private class Color { enum Colors { RED, BLUE, YELLOW, GREEN, BLACK, WHITE }; } private class Model { enum Models { SEDAN, SUV, CONVERTIBLE, HATCHBACK }; } }
方案二:保持year为int类型,转换输入参数
如果需要年份作为数值使用,把传入的字符串转成int类型:
public class Car { private int year; private String model; private String color; Car(int yr, String m, String c){ year = yr; model = m; color = c; } public void display() { System.out.println(year + ", " + model + ", " + color); } public static class Cardemo { public static void main(String[] args) { // 两种方式:直接传int数值,或用Integer.parseInt转换字符串 Car car1 = new Car(2014, "SEDAN", "BLACK"); // 或者 Car car1 = new Car(Integer.parseInt("2014"), "SEDAN", "BLACK"); car1.display(); } } private class Color { enum Colors { RED, BLUE, YELLOW, GREEN, BLACK, WHITE }; } private class Model { enum Models { SEDAN, SUV, CONVERTIBLE, HATCHBACK }; } }
额外优化:利用已定义的枚举类型
你已经定义了Colors和Models枚举,用它们替换字符串参数能让类型更安全:
public class Car { private int year; private Model.Models model; private Color.Colors color; Car(int yr, Model.Models m, Color.Colors c){ year = yr; model = m; color = c; } public void display() { System.out.println(year + ", " + model + ", " + color); } public static class Cardemo { public static void main(String[] args) { Car car1 = new Car(2014, Model.Models.SEDAN, Color.Colors.BLACK); car1.display(); } } // 内部类改为static,才能在静态main方法中访问 private static class Color { enum Colors { RED, BLUE, YELLOW, GREEN, BLACK, WHITE }; } private static class Model { enum Models { SEDAN, SUV, CONVERTIBLE, HATCHBACK }; } }
内容的提问来源于stack exchange,提问作者R R
相关产品推荐
相关产品推荐

