gpt4 book ai didi

java - 我可以通过调用类方法来初始化最终变量吗?

转载 作者:行者123 更新时间:2023-12-01 07:22:02 25 4
gpt4 key购买 nike

我正在编写一个java程序,需要一些最终变量。 java 类必须是单例对象。而且我无法直接初始化最终变量。这是我的代码:

 public class Car {

private Price price = null;

//Constructor
public Car(Price p) {
this.price = p;
}

//method to get the singleton
private static Car instance = null;
public static Car getInstance(Price p) {
if(instance == null) {
instance = new ExcelUtil2(p);
}
return instance;
}

//declare & initialize final variable
private final Wheel WHEEL_TYPE = getWheelType();

//get value of the final variable
public Wheel getWheelType() {

Wheel wheel = Car.createWheel();

if(price.getAmount() > 30000){
wheel.setWheelType("Alloy");
}else{
wheel.setWheelType("Alluminium");
}

return wheel;
}
}

我想知道我是否可以这样做:

private final Wheel WHEEL_TYPE = getWheelType();

这是我的第一个问题。

接下来的事情是,当我运行它时,我在以下位置收到 nullPointerException:

price.getAmount()

public Wheel getWheelType()方法中。

我正在使用公共(public)构造函数初始化价格。

我正在像这样在其他类中初始化该类:

Car car = Car.getInstance(price);

这里我验证了价格对象和price.getAmount()都不为空。

谁能指导我我做错了什么?谢谢

最佳答案

本质上没有什么问题

private final Wheel WHEEL_TYPE = getWheelType();

不过,一般来说(如 the Java tutorial 中的建议),当您这样做时,您应该调用无法重写的方法 - final 方法、static > 方法、私有(private)方法或final类中的方法。

但是,您的特定代码存在问题。在执行 getWheelType() 时,您将调用 price.getAmount(),并且 price 在构造函数主体中进行初始化。不幸的是,对于您的设计来说,字段实例初始化程序在构造函数主体之前执行,因此您最终将在初始化 price 之前调用 price.getAmount()

我建议您只需将对 WHEEL_TYPE 的赋值移至构造函数内部,位于对 price 赋值之后。

关于java - 我可以通过调用类方法来初始化最终变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33765404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com