如果不希望使用new 关键词创建对象,则可以把构造函数的访问权限设置为private
,尤其是那些只包含静态方法的工具类。
class MovieUtils{
private MovieUtils(){}
static String titleAndYear(Movie movie){//代码内容
}
}
使用静态工厂方法代替new
关键词创建对象,工厂方法通过不同的命名可以根据需要返回不同的子类对象,而且如果需要可以不用每次都创建新对象。
[Update] 一个读者提出一个建议:使用静态工厂后不方便测试,如果是这样,可以在测试期通过使用非静态工厂来模拟。class Movie{
//代码内容
static static Movie create(String title){return new Movie(title);
}
}
当构造方法中有超过三个参数时,可以考虑使用builder去构建对象,可能有些繁琐,但是这样易于扩展且可读性更强。如果是创建一个 value class,可以使用AutoValue
static Builder newBuilder() {
String title;
Builder withTitle(String title) {
this.title = title;
return this;}
private Movie(String title) {
//代码内容
}}
如果创建内部类时不依赖外部类,一定要定义为静态类,否则内部类的实例会持有外部类实例的引用。
static class MovieAward() {
//代码内容
}}