编辑: 星野哀 | 2019-07-15 |
11 初探
3 Movie movie
1 cast * Role roles * actor
1 Actor 图1-1:Media Mania 对象模型的 UML 示意图 持久保存的类 这一节我们要让Movie、 Actor 与Role 类能持久保存, 以便将其实例存入数据存储空 间.首先我们会检查各个类的完整源代码.每个类都有 import 语名,因此可以清楚知道 哪个包含有范例中所用的类. 例1-1 列出了 Movie 类的源代码.JDO 是定义在 javax.jdo 包中,请注意,此类并不 用导入任何特定的JDO类. 在java.util包中所定义的Java引用与集合可用来代表类 之间的关系,而且这也是多数 Java 应用程序的标准做法. Movie 类的字段使用标准的 Java 类型,如String、Date以及int.你可以将字段声明 成私有的(private) ,不一定要替各个字段定义公共的(public)get 与set 方法.Movie 类含有一些方法来取得及设定类中的私有字段, 不过这些方法也用在应用程序的其他部 分,而且也不是 JDO 所必要的.你也可以利用封装技术,只提供支持被模型化的抽象数 据的方法.此类也有静态(static)字段,它们不会被存入数据存储空间中. genres字段是保存电影类型(动作片、文艺爱情片、悬疑片等)的String,Set接口则 用来引用一组代表电影演员表的Role实例. addRole()方法会将元素新增至 cast集合 中,而getCast()则返回含有 cast 集合且不能修改的 Set.这些方法都不是 JDO 的需 求, 而是为了应用程序的方便而实现的. parseReleaseDate()与formatReleaseDate() 方法是用来标准化电影出片日期的格式.为了维持源代码的简洁,如果parseReleaseDate()的参数格式有误,即返回 null 值. 例1-1:Movie.java package com.mediamania.prototype;
import java.util.Set;
import java.util.HashSet;
import java.util.Collections;
import java.util.Date;
import java.util.Calendar;
import java.text.SimpleDateFormat;
import java.text.ParsePosition;
public class Movie {
第一章
12 4 private static SimpleDateFormat yearFmt = new SimpleDateFormat( yyyy );
public static final String[] MPAAratings = { G , PG , PG-13 , R , NC-17 , NR };
private String title;
private Date releaseDate;
private int runningTime;
private String rating;
private String webSite;
private String genres;
private Set cast;
// 数据类型:Role private Movie() {} public Movie(String title, Date release, int duration, String rating, String genres) { this.title = title;
releaseDate = release;
runningTime = duration;
this.rating = rating;
this.genres = genres;
cast = new HashSet();
} public String getTitle() { return title;
} public Date getReleaseDate() { return releaseDate;
} public String getRating() { return rating;
} public int getRunningTime() { return runningTime;
} public void setWebSite(String site) { webSite = site;
} public String getWebSite() { return webSite;
} public String getGenres() { return genres;
} public void addRole(Role role) { cast.add(role);
} public Set getCast() { return Collections.unmodifiableSet(cast);
} public static Date parseReleaseDate(String val) { Date date = null;
try {
13 初探
5 date = yearFmt.parse(val);
} catch (java.text.ParseException exc) {} return date;
} public String formatReleaseDate() { return yearFmt.format(releaseDate);
} } 为了让类能持久保存,JDO 有一项要求:无参数的构造函数.如果在类中未定义任何构 造函数,则编译器会自动产生无参数的构造函数;
不过,如果定义了任何含有参数的构 造函数,就不会产生此默认的构造函数.在此情况下,你需要自行提供无参数的构造函 数;