java - 为什么我不能从这个枚举中得到我想要的数据?
问题描述
我需要知道:为什么我不能将 maxSpeed 作为 int 而不是 Integer 传递给方法?
为什么它使用“getMaxSpeed.equals(speed)”方法工作但不能比较小于/大于?(我认为是因为 maxSpeed 是 Integer 而不是 int,对吧?)。代码不能用 compareTo 编译。
我需要获取 maxSpeed 大于“速度”的所有汽车的列表,我该怎么做?
如何不仅返回名称(BMW、Mercedes)而且返回engineCc?
尝试对原语使用普通运算符,对对象使用方法。
enum CarData {
BMW (230, 3000),
Mercedes (220, 2500);
private int maxSpeed;
private int engineCc;
CarData (int maxSpeed, int engineCc) {
this.maxSpeed = maxSpeed;
this.engineCc = engineCc;
}
Integer getMaxSpeed(){
return maxSpeed;
}
int getEngineCc() {
return engineCc;
}
public static CarData getByMaxSpeed (int speed) {
for (CarData carData : CarData.values()){
if (carData.getMaxSpeed() => speed)
return carData;
}
return null;
}
}
public class VehicleInfo {
public static void main (String [] args){
System.out.println (CarData.getByMaxSpeed(200));
}
}
预期结果是“BMW、Mercedes”或“3000、2500”,无论我需要哪个。
解决方案
int 是 Java 中的原始数据类型。Integer 是一个包装类。您不能以与基元相同的方式比较包装类的实例(如 Integer),使用 Integer 您必须使用方法,而使用基元则更简单。对于输出尝试覆盖枚举中的 toString 方法,此 toString 方法继承自 Object 类。完整的课程将是
enum CarData {
BMW(230, 3000),
Mercedes(220, 2500);
private int maxSpeed;
private int engineCc;
/* This method was added/overwritten */
@Override
public String toString() {
return name() + ", Cc: " + engineCc;
}
CarData(int maxSpeed, int engineCc) {
this.maxSpeed = maxSpeed;
this.engineCc = engineCc;
}
Integer getMaxSpeed() {
return maxSpeed;
}
int getEngineCc() {
return engineCc;
}
public static CarData getByMaxSpeed(int speed) {
for (CarData carData : CarData.values()) {
//Here I replaced the => by >=
if (carData.getMaxSpeed() >= speed) {
return carData;
}
}
return null;
}
}
公共类车辆信息 {
public static void main(String[] args) {
System.out.println(CarData.getByMaxSpeed(200));
}
} }
和输出:
宝马,抄送:3000
如果您想要不同的字符串,只需自定义 toString 方法中的返回值,您还必须将 => 替换为 >= 进行比较。
希望这可以帮助。
推荐阅读
- gitlab-ci - gitlab-ci 缓存如何在 docker runner 上运行?/cache 目录是什么?什么是cache_dir?
- php - 生成 15 个随机数,可能相同 2 次但不能相同 3 次
- java - Java 质疑 this 和构造函数的参数
- python - s3.Object() 抛出 TypeError: sequence item 0: expected str instance, tuple found
- webgl - WebGL 使用 36 个索引绘制立方体
- node.js - CORS 问题 - 响应中“Access-Control-Allow-Origin”标头的值不能是通配符“*”
- php - 以编程方式创建类别和子类别 Wordpress
- reactjs - 使用 Typescript 为 json 流重写对双簧管的 fetch 调用
- javascript - 如何从 api 获取内部数据?(反应,节点)
- android - 我如何将图像设置到 textview 的右下角并带有流动的文字?