我正在使用Java 8中的新lambda特性,并发现Java 8提供的实践非常有用。 不过,我想知道是否有一个好的方法来解决以下情况。 假设你有一个对象池封装器,需要某种工厂来填充对象池,例如(使用java.lang.functions.Factory ): public class JdbcConnectionPool extends ObjectPool<Connection> { public ConnectionPool(int maxConnections, String url) { super(new Factory<Connection>() { @Override public Connection make() { try { return DriverManager.getConnection(url); } catch ( SQLException ex ) { throw new RuntimeException(ex); } } }, maxConnections); } } 在将函数接口转换为lambdaexpression式之后,上面的代码变得如下所示: public class JdbcConnectionPool extends ObjectPool<Connection> { public ConnectionPool(int […]
我怎样才能从Java 8stream/ lambdas中引发CHECKEDexception? 换句话说,我想编译这样的代码: public List<Class> getClasses() throws ClassNotFoundException { List<Class> classes = Stream.of("java.lang.Object", "java.lang.Integer", "java.lang.String") .map(className -> Class.forName(className)) .collect(Collectors.toList()); return classes; } 此代码不会编译,因为上面的Class.forName()方法会抛出ClassNotFoundException 。 请注意,我不想将检查的exception包装在运行时exception中,而是抛出包装的未经检查的exception。 我想抛出检查exception本身 ,而不添加丑陋的try / catches到stream。
我已经阅读关于检查与未经检查的exceptionStackOverFlow多个职位。 我老实说还不太清楚如何正确使用它们。 Joshua Bloch在“ Effective Java ”中表示 对于可恢复的条件和运行时exception使用已检查的exception来编程错误(第二版中的第58项) 让我们看看我是否正确理解这一点。 这是我对一个检查的exception的理解: try{ String userInput = //read in user input Long id = Long.parseLong(userInput); }catch(NumberFormatException e){ id = 0; //recover the situation by setting the id to 0 } 1.以上是否考虑检查exception? 2. RuntimeException是一个未经检查的exception吗? 这是我对未经检查的例外的理解: try{ File file = new File("my/file/path"); FileInputStream fis = new FileInputStream(file); }catch(FileNotFoundException e){ //3. […]