现在已经使用Java 8超过6个月左右,我对新的API更改感到非常满意.我仍然不自信的一个领域是什么时候使用Optional.我似乎想要在任何可能的null地方使用它,而且无处可去.
似乎有很多情况我可以使用它,我不知道它是否增加了好处(可读性/无效安全性)或只是导致额外的开销.
所以,我有一些例子,我对社区是否Optional有益的想法感兴趣.
1 - 当方法可以返回时作为公共方法返回类型null:
public Optional<Foo> findFoo(String id);
Run Code Online (Sandbox Code Playgroud)
2 - 当参数可能是null以下时作为方法参数:
public Foo doSomething(String id, Optional<Bar> barOptional);
Run Code Online (Sandbox Code Playgroud)
3 - 作为bean的可选成员:
public class Book {
private List<Pages> pages;
private Optional<Index> index;
}
Run Code Online (Sandbox Code Playgroud)
4 - 在Collections:
一般来说,我不认为:
List<Optional<Foo>>
Run Code Online (Sandbox Code Playgroud)
添加任何东西 - 特别是因为可以使用filter()删除null值等,但是Optional在集合中是否有任何好的用途?
我错过了什么案例?
如果存储库中不存在依赖关系版本,我希望能够提供替代版本.
阅读文档,这似乎是可能的:
如果某个依赖关系版本被破坏且不应该使用,这将非常有用,其中依赖关系解析规则会导致此版本被已知的良好版本替换.破坏模块的一个示例是声明对在任何公共存储库中找不到的库的依赖性的模块.
我可以看到如何切换依赖项,但我无法弄清楚如何首先检查依赖项是否不存在.
提前致谢.
我编写了一个在Tomcat 6中部署的自定义MBean.其任务之一是查询数据库值.我这样做是通过使用JNDI加载数据库资源 - 资源是在Tomcat的server.xml中定义的.
问题是,当我创建javax.naming.InitialContext它的实例时会抛出一个ClassNotFoundException无法找到的实例org.apache.naming.java.javaURLContextFactory.该类catalina.jar由公共类加载器加载并加载.包含我的MBean代码的jar由共享类加载器加载.
关于如何解决这个问题的任何想法?
要注意:我的MBean是由我在其中定义的ContextListener加载的tomcat/conf/web.xml.我也在一个webapp中定义它web.xml没有任何区别.我无法真正移动我的jar以便由公共类加载器加载,因为它依赖于共享类加载器加载的类.
提前致谢,
将