Optional Java 8中引入的类型对于许多开发人员来说是一件新事物.
一个getter方法返回Optional<Foo>类型代替经典的Foo一个好习惯吗?假设值可以null.
使用Java 8,我有这样的代码:
if(element.exist()){
// Do something
}
Run Code Online (Sandbox Code Playgroud)
我想转换为lambda风格,
element.ifExist(el -> {
// Do something
});
Run Code Online (Sandbox Code Playgroud)
使用这样的ifExist方法:
public void ifExist(Consumer<Element> consumer) {
if (exist()) {
consumer.accept(this);
}
}
Run Code Online (Sandbox Code Playgroud)
但现在我还有其他情况要打电话:
element.ifExist(el -> {
// Do something
}).ifNotExist(el -> {
// Do something
});
Run Code Online (Sandbox Code Playgroud)
我可以写一个类似的ifNotExist,我希望它们是互斥的(如果exist条件为真,则无需检查ifNotExist,因为有时,exists()方法需要花费很多工作量来检查),但我总是要检查两个倍.我怎么能避免这种情况?
也许"存在"这个词会让别人误解我的想法.你可以想象我还需要一些方法:
ifVisible()
ifEmpty()
ifHasAttribute()
Run Code Online (Sandbox Code Playgroud)
很多人说这是个坏主意,但是:
在Java 8中,我们可以使用lambda forEach而不是传统的for循环.在编程中for,if是两个基本的流程控制.如果我们可以使用lambda作为for循环,为什么使用lambda是个if坏主意?
for (Element element : list) {
element.doSomething();
}
list.forEach(Element::doSomething);
Run Code Online (Sandbox Code Playgroud)
在Java 8中,有Optional …
我有一个函数,有时必须返回Date一次DateTime(Joda-Time).
static public <T extends Object> T convertTimeForServer(DateTime toSave) {
DateTime temp = null;
try {
temp = toSave.withZone(DateTimeZone.forID(getServerTimeZone()));
} catch (Exception e) {
}
T toReturn = null;
if (toReturn.getClass().equals(temp)) {
return (T) temp;//Return DATETIME
} else {
return (T) temp.toDate();//Return DATE
}
}
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?
如何使用它?
像这样(timerHelper是类的名称):
DateTime t = timerHelper.<DateTime>convertTimeForServer(new DateTime());
Date t2 = timerHelper.<Date>convertTimeForServer(new DateTime());
or
DateTime t = (DateTime)timerHelper.convertTimeForServer(new DateTime());
Date t2 = (Date)timerHelper.convertTimeForServer(new DateTime());
Run Code Online (Sandbox Code Playgroud)
以及如何使用此功能?
static public <T extends Object> T …Run Code Online (Sandbox Code Playgroud)