我刚刚在德国Windows机器上安装了JDK7,我注意到的第一件事就是它与操作系统之后的JDK6和一些消息(例如,来自工具的帮助消息,而不是来自编译器的错误消息)是德语版本.我怎么能强迫它到处使用英语呢?AFAIK安装程序不是特定于语言的,安装过程中的所有消息都是英文的.
我的代码在Java 5和6中运行,但是当我升级到Java 7时,我得到一个"java.lang.ClassCastException:java.lang.Class不能转换为java.lang.reflect.GenericArrayType".
对于以下代码:
public class A<T> {
public Vector<Integer[]> arr;
}
System.out.println(((ParameterizedType)A.class.getField("arr").getGenericType()).getActualTypeArguments()[0]);
System.out.println(((ParameterizedType) A.class.getField("arr").getGenericType()).getActualTypeArguments()[0].getClass());
Run Code Online (Sandbox Code Playgroud)
Java6打印:
java.lang.Integer[]
class sun.reflect.generics.reflectiveObjects.GenericArrayTypeImpl
Run Code Online (Sandbox Code Playgroud)
Java7打印:
class [Ljava.lang.Integer;
class java.lang.Class
Run Code Online (Sandbox Code Playgroud)
这种不同的行为破坏了我依赖于泛型的代码.是否有人可以帮助我理解为什么会这样,以及如何获得GenericArrayType从Vector<Integer[]> arr?
我在Win 7下运行Ant 1.8.1.我的Java版本是1.7_17.
我在构建文件中添加以下2行进行诊断.
<echo message="java.version = ${ant.java.version}" />
<echo message="java.home = ${java.home}" />
Run Code Online (Sandbox Code Playgroud)
结果是
[echo] java.version = 1.6
[echo] java.home = C:\Program Files\Java\jre7
Run Code Online (Sandbox Code Playgroud)
对于发生了什么有什么想法?
在Ant 1.8.1中硬编码它可以显示的最高java版本是1.6吗?
我想使用Java NIO观察(监视)多个目录 WatchService.我的问题是要监视的目录数是动态的,用户可以添加任意数量的目录WatchService.这可以实现吗?
我想使用java.nio.file API为Android创建一个文件管理器应用程序,它是JDK7的一部分.我认为这个(java.noi.file)API包含设计文件管理器应用程序的简单解决方案,其中JDK6(IO)和apache commons IO API没有相同的功能.
请给出一些解决方案,我如何在Android应用程序中使用JDK7(IO).
谢谢!
如何使用方法句柄调用私有方法?
据我所知,只有两种可公开访问的Lookup实例:
MethodHandles.lookup()MethodHandles.publicLookup()并且都不允许不受限制的私人访问.
有非公众Lookup.IMPL_LOOKUP做我想做的事.是否有一些公共方法来获取它(假设SecurityManager允许它)?
我最近注意到,自从我更新到Java 7以来,我的代码的特定部分运行速度明显变慢.令人惊讶的是,Java 7的全局速度比Java 6快.
该程序非常庞大,但我成功地提取了一个可重现的代码来演示java 7如何比Java 6慢.
如果您使用Java 6和Java 7运行完全相同的代码,您会发现Java 7比Java 6慢大约7-8倍!
这是代码(不要试图理解它的作用,它只是来自真实代码的摘要,因此并没有真正意义).它基本上是一个解析字符串以格式化其中某些部分的代码:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Window;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
public class CPerfJava7 extends JFrame {
private static final long serialVersionUID = 1L;
// +==============================================================+
// | Attributes |
// +==============================================================+
JPanel mainPanel;
public CPseudoHtmlDocument docu;
private static long totalTime = …Run Code Online (Sandbox Code Playgroud) Spring Security基本示例给出了此异常.
错误:"通用匹配模式('/**')在过滤器链中的其他模式之前定义,导致它们被忽略.请检查命名空间或FilterChainProxy bean配置中的顺序"
我在同一个问题上查了很多帖子.但找不到任何解决方案.任何人都可以部署一个hello spring security吗?
我使用的是这些版本 - Spring 3.2.0.RELEASE/Spring security 3.2.0.RELEASE/Tomcat 7/Java 1.7.
这是我的代码:
web.xml中
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Spring security sample Web Application</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-context.xml,
/WEB-INF/security-context.xml</param-value>
</context-param>
<!-- Spring security -->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>spring-dispatcher-servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-context.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>spring-dispatcher-servlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud)
弹簧的context.xml
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.2.xsd">
<authentication-manager>
<authentication-provider>
<user-service>
<user …Run Code Online (Sandbox Code Playgroud) 泛型是棘手的.看起来它们在不同版本的Java中被区别对待.
此代码在Java 7中成功编译,无法使用Java 8进行编译.
import java.util.EnumSet;
public class Main {
public static void main(String[] args) {
Enum foo = null;
tryCompile(EnumSet.of(foo));
}
static <C extends Enum<C> & Another> void tryCompile(Iterable<C> i) {}
static interface Another {}
}
Run Code Online (Sandbox Code Playgroud)
这是来自Java 8的错误消息.我用这个来编译它:http://www.compilejava.net/
/tmp/java_A7GNRg/Main.java:6: error: method tryCompile in class Main cannot be applied to given types;
tryCompile(EnumSet.of(foo));
^
required: Iterable<C>
found: EnumSet
reason: inferred type does not conform to upper bound(s)
inferred: Enum
upper bound(s): Enum<Enum>,Another
where C is a type-variable: …Run Code Online (Sandbox Code Playgroud) 我可能会过度思考这个问题,但我只是写了代码:
try (InputStream in = ModelCodeGenerator.class.getClassLoader().getResourceAsStream("/model.java.txt"))
{
modelTemplate = new SimpleTemplate(CharStreams.toString(new InputStreamReader(in, "ascii")));
}
Run Code Online (Sandbox Code Playgroud)
这意味着InputStreamReader永远不会关闭(但在这种情况下,我们知道它的close方法只是关闭底层的InputStream.)
人们可以把它写成:
try (InputStreamReader reader = new InputStreamReader(...))
Run Code Online (Sandbox Code Playgroud)
但这似乎更糟糕.如果由于某种原因抛出InputStreamReader,则InputStream将永远不会被关闭,对吧?这是C++中的常见问题,其中构造函数调用其他构造函数.异常可能导致内存/资源泄漏.
这里有最好的做法吗?
java-7 ×10
java ×8
generics ×2
nio ×2
android ×1
ant ×1
file-manager ×1
java-6 ×1
java-8 ×1
methodhandle ×1
performance ×1
reflection ×1
swing ×1
tomcat7 ×1