我的课程很少:
public class Person {
private String personName;
private String personSurname;
private int age;
private Task task;
private Document document;
//getters and setters
public class Task {
private long taskNumber;
private String taskDescription;
private String taskPriority;
//get&set
public class Document {
private String docName;
private String docDescription;
private long docNumber;
private String docType;
private DocumentAuthor documentAuthor;
// get&set
public class DocumentAuthor {
private String documentAuthorName;
private long documentAuthorNumber;
private String documentAuthorDescription;
// get&set
在创建Person对象之后,我需要从一些字段构建描述(使用StringBuilder),例如:personName,personSurname,taskDescription,docDescription和documentAuthorDescription。事情是我必须检查一些对象/字段的nullables(我不想在描述中存储空值)。在这一刻,我这样做:
private static String setStringBuilder(Person person) {
StringBuilder sb = new StringBuilder();
//create Optional objects for every class except Person:
Optional<Document> personDocument = Optional.fromNullable(person.getDocument());
Optional<Task> personTask = Optional.fromNullable(person.getTask());
Optional<DocumentAuthor> personDocumentAuthor = Optional.fromNullable(person.getDocument().getDocumentAuthor());
//create List where i add fields for description
List<Optional<String>> list = new ArrayList();
list.add(Optional.fromNullable(person.getPersonName()));
list.add(Optional.fromNullable(person.getPersonSurname()));
//in this section i check presents of objects:
if (personDocument.isPresent()) {
list.add(Optional.fromNullable(person.getDocument().getDocDescription()));
list.add(Optional.fromNullable(person.getDocument().getDocType()));
}
if (personTask.isPresent()) {
list.add(Optional.fromNullable(person.getTask().getTaskDescription()));
}
if (personDocumentAuthor.isPresent()) {
list.add(Optional.fromNullable(person.getDocument().getDocumentAuthor().getDocumentAuthorName()));
}
//here i build StringBuilder from fields stored in list
for (Optional<String> optional : list) {
if (optional.isPresent()) {
sb.append(optional.get());
sb.append(" ");
}
}
String description = sb.toString();
return description;
}
但我相信有一些最酷的方法可以用Guava Optionals来做到这一点。特别是当我检查空的女巫时。所以请给我一些建议并原谅我糟糕的坏英语:)
答案 0 :(得分:0)
不要担心解决问题的“最酷”方式,而是关注“最干净”,“最安全”和“最容易维护”的解决方案。
处理null
肯定容易出错,导致countless bugs,但它们是Java语言的一部分,有时候它们就是你需要的。
特别是,在API边界公开Optional
(例如作为公共方法的返回类型)通常更有意义,而不是返回可能为空的值。这样,您的呼叫者就可以放心,安全地使用您的代码,而不必担心意外的NPE。不过,使用null
或其他一些概念表示缺席,您的私人实施可能会更好。
根据经验,Optional
应该使您的代码更安全,更易于使用。如果你发现自己跳过篮球以使事情Optional
退后一步并考虑其他方法。