gpt4 book ai didi

java - 在创建新的 Java 对象实例时在匿名代码块中初始化变量是否兼容?

转载 作者:行者123 更新时间:2023-11-29 08:27:23 24 4
gpt4 key购买 nike

就像这样:

class Car {
int carId;
String brand;
public Car(int carId, String brand) {
this.carId = carId;
this.brand = brand;
}
// getter and setter
public String toString() {
return " car :" + "id - " + carId + ", brand - " + brand;
}
}
public class User {
String name;
Car car;
// getter and setter
public String toString() {
return name + " has a " + car.toString();
}
public static void main(String[] args) {
// 1st
User u = new User() {
{ // my problem is here : is this block OK?
setName("Tom");
setCar(new Car(1, "Volvo"));
}
};
// 2nd or this
// Car car = new Car(1, "Volvo");
// User u = new User();
// u.setName("Tom");
// u.setCar(car);

System.out.println(u);
}
}

我知道这在 C# 中运行良好,似乎在 Java 中也能运行。但是,真的不清楚这是正确的还是良好的代码风格...非常感谢您的帮助!

最佳答案

在 Java 中,您在这里创建了一个匿名内部类

因此该对象不是User,而是User 的子类。

它非常不常见,大多数人认为它是糟糕的风格。有些人“偶然”使用它(不知道他们在做什么),一些人建议遵循这种模式。但总的来说,它会让大多数读者感到惊讶,编程中的基本规则是避免这样做。您遵守惯例,即使它们是非正式的并且没有写下来。

郑重声明:根据您实现自己的 equals() 方法的方式,这种动态创建子类实例的方法甚至可能会导致奇怪的错误。

因此:根本不要这样做。

关于java - 在创建新的 Java 对象实例时在匿名代码块中初始化变量是否兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51535170/

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