XHTML:
<p:carousel value="#{carouselView.cars}" var="car" itemStyleClass="carItem">
<h:panelGrid columns="2" style="width:100%" cellpadding="5" columnClasses="label,value">
<f:facet name="header">
<p:graphicImage name="../images/cars/#{car.brand}.gif"/>
</f:facet>
<h:outputText value="Id:" />
<h:outputText value="#{car.id}" />
<h:outputText value="Year" />
<h:outputText value="#{car.year}" />
<h:outputText value="Color:" />
<h:outputText value="#{car.color}" style="color:#{car.color}"/>
Package1有1个java文件:
的 CarService.java
public class CarService {
private final static String[] colors;
private final static String[] brands;
static {
colors = new String[10];
colors[0] = "Black";
colors[1] = "White";
colors[2] = "Green";
colors[3] = "Red";
brands = new String[10];
brands[0] = "BMW";
brands[1] = "Mercedes";
brands[2] = "Volvo";
brands[3] = "Audi";
}
public List<Car> createCars(int size) {
List<Car> list = new ArrayList<Car>();
list.add(new Car(getRandomId(), getRandomBrand(), getRandomYear());
return list;
}
private String getRandomId() {
return UUID.randomUUID().toString().substring(0, 8);
}
private int getRandomYear() {
return (int) (Math.random() * 50 + 1960);
}
private String getRandomBrand() {
return brands[(int) (Math.random() * 10)];
}
public List<String> getColors() {
return Arrays.asList(colors);
}
public List<String> getBrands() {
return Arrays.asList(brands);
}
}
Package2有2个java文件:
的 1.CarouselView.java
public class CarouselView implements Serializable {
private List<Car> cars;
private Car selectedCar;
private CarService service;
@PostConstruct
public void init() {
cars = service.createCars(3);
}
public List<Car> getCars() {
return cars;
}
public void setService(CarService service) {
this.service = service;
}
public Car getSelectedCar() {
return selectedCar;
}
public void setSelectedCar(Car selectedCar) {
this.selectedCar = selectedCar;
}
}
2.Car.java
public class Car {
String randomId;
String randomBrand;
int randomYear;
public Car(String randomId, String randomBrand, int randomYear) {
this.randomId = randomId;
this.randomBrand = randomBrand;
this.randomYear = randomYear;
}
}
我收到错误,
Caused by: java.lang.NullPointerException
at com.abc.mmc.dto.CarouselView.init(CarouselView.java:35)
答案 0 :(得分:1)
构造函数不应返回任何内容。对于典型的POJO's(非常普通的Java对象),目标是使用指定的参数创建(或构造)对象。
例如:
public class Car {
private String randomId;
private String randomBrand;
private String randomYear;
public Car(String randomId, String randomBrand, int randomYear) {
this.randomId = randomId;
this.randomBrand = randomBrand;
this.randomYear = randomYear;
}
//Getters and Setters follow
}
this.randomId = randomId;
您接受参数randomId
并将其分配给类变量this.randomId
这是常见的惯例。这是一个备用代码片段来详细说明意图(尽管先前是首选,假设您的变量名称很好):
private String carId;
private String carBrand;
private int carYear;
public Car(String randomId, String randomBrand, int randomYear){
carId = randomId;
carBrand = randomBrand;
carYear = randomYear;
}
如果你将参数传递给方法的构造函数而不对它们做任何事情,那就浪费时间了。你只是建造裸体物体。接收传入参数并使用这些项“设计”Car
对象非常重要。
编辑以下OP更新:
您在service.createCars(3);
上收到NullPointerException,因为您没有初始化CarService
对象:
private Car selectedCar;
private CarService service;
@PostConstruct
public void init() {
service = new CarService(); //Create your service object
cars = service.createCars(3);
}
答案 1 :(得分:1)
构造函数不返回任何内容。 您可能希望在构造函数中从参数到对象中设置一些值。 类似的东西:
public class Car {
private String randomId;
private String randomBrand;
private int randomYear;
public Car(String randomId, String randomBrand, int randomYear) {
this.randomId = randomId;
this.randomBrand = randomBrand;
this.randomYear = randomYear;
}
}
答案 2 :(得分:1)
构造函数永远不会有返回类型,即使不能返回类型void
,构造函数名称也必须与类名相似。但构造函数可能是private
或public
-
private Car(); //or
public Car();
从您的问题描述中,您似乎需要添加一些getter / setter方法来访问private
类中的Car
字段。
要使用构造函数正确工作,您不需要从中添加return语句。任何创建Car
实例/对象的类都可以使用 new
运算符以及公共构造函数 -
//In some class that need an instance/object
//of Car class
Car aCar = new Car(... //arguments list);
注意:此处 Car()
是公共构造函数,它没有返回类型。在上面的陈述中发生了一些事情 -
1。 JVM使用公共构造函数Car()
创建新的实例/对象
2。新创建的Car
类型对象分配了Car
类型引用变量 - aCar。
答案 3 :(得分:0)
你不需要退货。构造函数没有回报。它使用初始化。
答案 4 :(得分:0)
在这样一个简单的构造函数中,我根本不会返回任何值。由于更复杂,尤其依赖于外部源,我可能会为构造成功或失败添加一个布尔值。