Tag: java 8

什么是Java中的“SAMtypes”?

阅读Java-8规范,我总是看到“SAMtypes”的引用。 我一直无法find这是什么的明确解释。 什么是SAMtypes,什么时候可以使用什么样的情况?

Java 1.8 ASM ClassReader无法parsing类文件 – 可能是由于尚未支持新的Java类文件版本

我的Web应用程序在JDK 1.7上运行良好,但是在1.8版本中崩溃,但出现以下exception(在使用Jetty 8启动应用程序服务器期间)。 我正在使用Spring版本:3.2.5.RELEASE。 例外: org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file – probably due to a new Java class file version that isn't supported yet 我认为这个问题是由于Spring和它所依赖的“asm.jar”库引起的。 我如何解决这个问题?

我如何从一个长时间的毫秒级创build一个Java 8 LocalDate?

我有一个外部的API返回我的date为s,表示为Epoch以来的毫秒数。 使用旧式的Java API,我只需简单地用它构造一个Date Date myDate = new Date(startDateLong) Java 8的LocalDate / LocalDateTime类中的等价物是什么? 我有兴趣将long表示的时间点转换为当前本地时区中的LocalDate 。

“为什么Apache Harmony”或“如何在Android上使用Java 8”

我们中的大多数人都已经听说Java 8会带来很酷的function,但是Android不会支持它。 这是因为Google使用Apache Harmony for Android。 这就是让我们(Android应用程序开发人员)改进我们的代码的lambdas,在接口中的默认实现,切换string等等。 当然,我们会处理一段时间,但是如果我们在应用程序中使用的某些库开始使用Java 8function呢? 据我所知,这是行不通的(请纠正我,如果错误)。 这将导致Standard- Java和Android- Java之间的不兼容。 这不可能是谷歌打算的,或者至less我不能想到为什么一家开发广泛采用的操作系统的公司将不能永久留在旧的 Java版本。 问题: 为什么他们使用Apache Harmony? 为什么他们不能采用更新版本的java? 如果他们不想要Oracle的Java,为什么他们不能使用OpenJDK的子集(在这里许可noob)? 你知道有更新使用Java版本的计划吗? 你知道在目前的Android系统上使用Java 8类的方法吗?

在Java 8中,“sugar”,“desugar”是什么?

在Java 8中,我经常听到有关“加糖”和“解脱”的问题,这些术语是什么意思? 他们是概念上的还是语法上的? 一些例子: 默认迭代循环resugaring到Java 关于语法糖在编写中的观察。

默认方法返回true一段时间,然后返回false? (可能的JVM错误)

我有一个下面的代码问题,我把它分离到最封闭的forms,我正在使用Java 8,几乎准备好发布(2014年3月18日),所以我期望在实现本身没有严重的问题,所以它可能/必须是我自己的代码: 注意:代码是用Java 8编写的,它具有各种新特性,包括接口中default方法实现。 public abstract class Drawable implements DrawableInterface { } interface DrawableInterface { default public boolean isShadowReceiver() { return false; } default public boolean isShadowCaster() { return false; } } public interface ShadowDrawable extends DrawableInterface { @Override default public boolean isShadowReceiver() { return true; } @Override default public boolean isShadowCaster() { return true; […]

Java 8:在lambdaexpression式中强制检查exception处理。 为什么是强制性的,不可选

我正在使用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 8中,为什么ArrayList的默认容量现在为零?

据我所知,在Java 8之前, ArrayList的默认容量是10。 令人惊讶的是,对默认(void)构造函数的评论仍然说: Constructs an empty list with an initial capacity of ten. 从ArrayList.java : /** * Shared empty array instance used for default sized empty instances. We * distinguish this from EMPTY_ELEMENTDATA to know how much to inflate when * first element is added. */ private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; … […]

为什么新的Java 8 Date Time API不具有纳秒精度?

Java 8中新的Date Time API的function之一应该是纳秒精度。 但是,当我打印当前date时间到控制台像这样 DateTimeFormatter formatter = DateTimeFormatter .ofPattern("yyyy-MM-dd'T'HH:mm:ss,nnnnnnnnnZ"); System.out.println(OffsetDateTime.now().format(formatter)); 我只看到毫秒精度:2015-11-02T12:33:26,746000000 + 0100 操作系统似乎支持纳秒精度。 当我通过terminal打印当前的date时间 date -Ins 我看到2015-11-02T12:33:26,746134417 + 0100 如何在Java中获得纳秒精度? 我在Ubuntu 14.04 64位上运行Oracle Java 1.8.0_66

在Spring MVC中使用ScrollableResults-backed Stream作为返回types时遇到困难

重要提示:这已被作为4.1.2的目标修复版本的Spring问题接受。 我的目标是在从Hibernate的ScrollableResults生成HTTP响应时实现O(1)空间复杂性。 我想保留一个MessageConverter分派的标准机制来处理从@Controller返回的对象。 我已经设置了以下内容: MappingJackson2HttpMessageConverter了一个处理Java 8 Stream的JsonSerializer ; ScrollableResultSpliterator需要将ScrollableResults封装到Stream ; OpenSessionInViewInterceptor需要保持Hibernate会话在MessageConverter打开; 设置hibernate.connection.release_mode为ON_CLOSE ; 确保JDBC连接具有必需的ResultSet可保存性: con.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT) 。 另外,我需要一个支持这种可保存性的数据库。 PostgreSQL是这样一个数据库,我没有这个问题。 我遇到的最后一个绊脚石是HibernateTransactionManager对事务提交使用的策略:除非底层会话是“Hibernate-managed”,否则它将disconnect() ,closures我的游标以及所有其他事物。 这种政策在一些特殊情况下是有用的,特别是“对话范围内的会议”,这远远不符合我的要求。 我设法解决了这个问题:我不得不用一个方法覆盖违规的方法,除了删除的disconnect()调用之外,它实际上是一个原始的复制粘贴,但是它必须通过reflection来访问private API。 public class NoDisconnectHibernateTransactionManager extends HibernateTransactionManager { private static final Logger logger = LoggerFactory.getLogger(NoDisconnectHibernateTransactionManager.class); public NoDisconnectHibernateTransactionManager(SessionFactory sf) { super(sf); } @Override protected void doCleanupAfterCompletion(Object transaction) { final JdbcTransactionObjectSupport txObject = (JdbcTransactionObjectSupport) transaction; final […]