我正在使用安装了Oracle的Java 7的Mac OS Xtesting当前的应用程序。 而是使用Oracle的Java 7,而是使用Apple的Java 6。 java -version的默认系统输出显示为7 。 我尝试了不同网站中提到的大部分内容,但是我无法解决这个问题。 JAVA_HOME也正确设置。 我只用于testing目的使用Mac。 我真的需要一些指导。 当我通过selectJRE 7运行Eclipse时,它运行正常。 因此,应用程序没有任何问题。 我在Mac OS X上缺less一些东西。 我的Java系统环境如下所示: OS X版本 10.8 /usr/libexec/java_home -V Matching Java Virtual Machines (3): 1.7.0_12, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_12.jdk 1.6.0_37-b06-434, x86_64: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home 1.6.0_37-b06-434, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home /Library/Java/JavaVirtualMachines/jdk1.7.0_12.jdk/Contents/Home /usr/libexec/java_home /Library/Java/JavaVirtualMachines/jdk1.7.0_12.jdk/Contents/Home echo $JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_12.jdk/Contents/Home/ […]
到目前为止,Android开发者工具是否支持JAVA 7 API? 我试图build立一个使用JAVA 7的Android应用程序,我想知道这件事情。
如何整合创build/接收连接的常见JDBC习惯用法,查询数据库并可能使用Java 7的自动资源pipe理,try-with-resources声明处理结果? ( 教程 ) 在Java 7之前,通常的模式是这样的: Connection con = null; PreparedStatement prep = null; try{ con = getConnection(); prep = prep.prepareStatement("Update …"); … con.commit(); } catch (SQLException e){ con.rollback(); throw e; } finally{ if (prep != null) prep.close(); if (con != null) con.close(); } 有了Java 7,你可以去: try(Connection con = getConnection(); PreparedStatement prep = con.prepareConnection("Update […]
我发现PropertyEditorManager在每个ThreadGroupContext基础上注册/查找编辑器,而不是像Java7之前的每个全局registry那样。 而Java7每次都为一个新的ThreadGroup创build一个新的ThreadGroup 。 因此,PropertyEditorFinder(实际上注册/find编辑器)也是新的。 Java为某些类( Byte , Long等)使用预定义的编辑器,并将它们注册到PropertyEditorFinder ( ctor )中。 比方说,我想注册我自己的PropertyEditor一些预定义的类(即长)。 在Java6中很容易,但在Java7中,每次在新的ThreadGroup中创build线程时,都会丢失我的编辑器。 那么你能告诉我有什么解决scheme可以很好地处理在Java7中为一个新的ThreadGroup创build的编辑器吗? 如果面对一些问题,你是如何克服的? PS我想我应该为我的英语道歉=) PPS ThreadGroupContext是AppContext的替代品。 我希望创build上下文的实现类似:都使用ThreadGroup与上下文(Java 6中的AppContext ,Java 7中的ThreadGroupContext )之间的映射。 而Java 6使用与其父代相同的AppContext作为新的ThreadGroup 。 换句话说, AppContext用于jvm中的整个ThreadGroup树。 但不幸的是创buildThreadGroupContext是不同的 – 它只是一个新组的新的上下文。 所以如果有一天ThreadGroupContext将使用相同的创build技术,问题将自动解决。
我尝试使用新的Gmail API,并使用java.nio.file包中的类ei Files和FileSystems 。 这些类是在Java jdk 1.7中引入的,因为我在Android应用程序中运行jdk 1.7.0_65,所以我不知道为什么Android Studio找不到这些类。 import是: import java.nio.file.FileSystems; import java.nio.file.Files; 当然我的build.gradle文件告诉系统使用v。1.7这样 android { compileSdkVersion 19 buildToolsVersion '20' … compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } } 我指向jdk的正确目录: jdk在External Libraries部分列出: 如果我浏览Java文件,我甚至可以findjava.nio.file.Files和.FileSystems: 现在,****正在发生什么!? 从我的理解,我在这里做的一切,有什么build议吗?
由于Android目前不支持java7,我发现自己想知道如果他们正在支持java7,他们是否提出了正式的评论?
我正在研究JDK 1.7的新function,而我无法得到MethodHandle的devise目的? 我理解(直接)调用静态方法(以及在这种情况下直接使用Core Reflection API)。 我也理解(直接)调用虚拟方法(非静态,非最终)(以及使用需要通过Class的层次结构obj.getClass().getSuperclass() )的Core Reflection API。 非虚拟方法的调用可以视为前者的特例。 是的,我意识到超载有一个问题。 如果你想调用方法,你必须提供确切的签名。 您不能以简单的方式检查重载的方法。 但是,什么是MethodHandle呢? Reflection API允许你在没有任何预先假设的情况下(比如实现接口)“查看”对象内部。 你可以检查对象的目的。 但MethodHandle的devise是什么? 为什么和什么时候应该使用它? 更新:我正在阅读这篇http://blog.headius.com/2008/09/first-taste-of-invokedynamic.html文章。 据此,主要目标是简化运行在JVM之上的脚本语言的生活,而不是为Java语言本身。 更新-2:我完成阅读上面的链接,从那里一些报价: JVM将成为构builddynamic语言的最佳VM,因为它已经是一个dynamic语言VM。 而通过将dynamic语言提升为一stream的JVM公民,InvokeDynamic将certificate这一点。 使用reflection来调用方法效果很好,除了一些问题。 方法对象必须从特定的types中检索,并且不能以一般的方式创build<…> 反映的调用比直接调用要慢很多。 多年来,JVM已经非常善于快速反映调用。 现代的JVM实际上在幕后产生了一堆代码,以避免大部分旧JVM处理的开销。 但简单的事实是,通过任意数量的层来反映访问总是比直接调用慢,部分原因是完全基因化的“调用”方法必须检查和重新检查接收者types,参数types,可见性和其他细节,但也因为参数必须全部是对象(所以原语获得对象框),必须提供作为一个数组,以涵盖所有可能的arities(所以参数获得数组盒)。 性能上的差异对于一个库进行一些reflection调用可能并不重要,特别是如果这些调用主要是dynamic地在内存中build立一个静态结构,可以进行正常的调用。 但是在dynamic的语言中,每次调用都必须使用这些机制,这是一个严重的性能问题。 http://blog.headius.com/2008/09/first-taste-of-invokedynamic.html 所以,对于Java程序员来说,它本质上是无用的。 我对吗? 从这个angular度来看,它只能被视为Core Reflection API的替代方式。
现在, Eclipse Indigo SR1内置Java 7支持终于在一两周内出现,我将我的游乐场项目从Helios SR2 + JDK 1.6_23迁移到Indigo SR1 + JDK 1.7.0。 所有项目完全重build后,只有一个类未能编译。 下面这个类在Java 1.6(和1.5)上编译和运行得很好: public abstract class Area<A extends Area<?>> implements Comparable<Area<?>> { private String name; private Area<?> parent; private Set<A> areas; protected Area(String name, A… areas) { this.name = name; this.areas = new TreeSet<A>(); for (A area : areas) { area.parent = […]
读了Java 8从lambdas中产生的字节码types后 ,我想起Java 5发布的时候了。 那时候有Retroweaver和其他工具来转换用JDK 5编译的字节码以在JRE 1.4上运行。 有没有人为Java 8 lambdas创build了这样的backporting工具? Java开发人员现在就可以开始使用lambdas生产品质的Java 7 JRE,而不必等待Java 8 GA版本的6-12个月。 这里是我的分析,为什么像backporter应该可以相对容易地实现: Java 8 lambdas似乎没有使用Java 7不具备的任何JVM特性(例如invokedynamic ), java.lang.invoke.LambdaMetafactory类及其依赖关系看起来像纯Java,所以应该可以实现它们在第三方库中。 因此,使用JDK 8编译的字节码可以通过添加第三方库和LambdaMetafactory副本(位于不同的包中)并通过转换字节码来使用该元数据库来运行JRE 7。 也许还会生成一些合成类和方法来绕过可访问性检查,就像java.lang.invoke.MagicLambdaImpl似乎暗示的那样。 或者为所有lambda生成匿名内部类,就像第一个启用了lambda的Early Access JDK所做的那样。
Java 7中的JCombobox已经更新为使用generics – 我一直认为这是一个疏忽,它还没有,所以我很高兴看到这种变化。 但是,当试图以这种方式使用JCombobox时,我意识到我期望使用这些genericstypes的方法仍然只是返回Object. 这是为什么呢? 这对我来说似乎是一个愚蠢的devise决定。 我意识到底层的ListModel有一个通用的getElementAt()方法,所以我将使用它,但是这是一个迂回的做法,看起来像它可以在JComboBox本身上进行更改。