最近有个朋友和我讨论,关于使用Lambda函数定义类功能时的争议。当创建具有动态值的对象时,应该使用Lambda来传递动态值,还是在自定义子类中提供重载方法来传递动态值?
考虑以下示例,目标是创建一个带有动态文本和图标属性的自定义标签组件。此标签必须具有
Lambda 方法:
考虑到内部和外部开发人员(包括 API 类)的期望、可读性和可用性,哪种方法更适合?
考虑以下示例,目标是创建一个带有动态文本和图标属性的自定义标签组件。此标签必须具有
getText()
和getIcon()
方法。以下是两个示例:一个使用多个Lambda,另一个定义一个子类。Lambda 方法:
class Label {
private Supplier<String> text;
private Supplier<Image> icon;
public Label(Supplier<String> text, Supplier<Image> icon) {
this.text = text;
this.icon = icon;
}
public String getText() {
return text.get();
}
public Image getIcon() {
return icon.get();
}
}
使用:
Label timeLabel = new Label(
() -> System.currentTimeMillis(),
() -> CLOCK_IMAGE
);
子类化方法:
class Label {
private String text;
private Image icon;
public Label() {
// some default
}
public Label(String text, Image icon) {
// set fields
}
// simple getters
}
使用:
class TimeLabel extends Label {
public String getText() {
return System.currentTimeMillis();
}
public Image getImage() {
return CLOCK_IMAGE;
}
}
Label timeLabel = new TimeLabel();
考虑到内部和外部开发人员(包括 API 类)的期望、可读性和可用性,哪种方法更适合?
currentTimeMillis()
演示,而不需要Label
实例注意到)。组件不仅包括属性的getter。我认为,这也应该回答你的问题... - Holger