标签: java-7

Java 7 - 精确重新抛出最终异常

在以前的java版本中,重新抛出异常被视为抛出catch参数的类型.

例如:

public static void test() throws Exception{
    DateFormat df = new SimpleDateFormat("yyyyMMdd");
    try {
        df.parse("x20110731");
        new FileReader("file.txt").read();
    } catch (Exception e) {
        System.out.println("Caught exception: " + e.getMessage());
        throw e;
    }
}
Run Code Online (Sandbox Code Playgroud)

在Java 7中,如果声明异常,则可以更精确地了解抛出的异常final:

//(doesn't compile in Java<7)
public static void test2() throws ParseException, IOException{
    DateFormat df = new SimpleDateFormat("yyyyMMdd");
    try {
        df.parse("x20110731");
        new FileReader("file.txt").read();
    } catch (final Exception e) {
        System.out.println("Caught exception: " + e.getMessage());
        throw e;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题:文档说我需要声明异常final.但如果我不这样做,上面的代码仍然编译和工作.我错过了什么吗?

参考文献:

项目硬币:多次捕获和最终重新抛出为重新抛出的
异常添加更灵活的检查

java final exception java-7

22
推荐指数
1
解决办法
6232
查看次数

Maven包编译错误

我在eclipse中使用maven创建了一个webapp项目.当我在命令提示符下运行命令mvn package时,它显示以下错误.

[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
[INFO] 1 error
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.310s
[INFO] Finished at: Tue Mar 05 14:32:23 IST 2013
[INFO] Final Memory: 16M/218M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.0:compile (default-compile) on project  Compilation fa
ilure
[ERROR] ***No compiler is provided in this environment. Perhaps you …
Run Code Online (Sandbox Code Playgroud)

java maven java-7

22
推荐指数
2
解决办法
7万
查看次数

"Javac"在Windows 10上无法正常运行

问题是我升级到Windows 10,现在我正在安装我的工具进行编程,现在我安装了Java的JDK 7,当我尝试在cmd中使用命令: - "javac"

结果是:"javac"未被识别为内部或外部命令......

但是我用jdk的正确链接编辑了PATH,因为当我使用"java"时,它没问题.

现在,我使用此命令在控制台中尝试: PATH=%PATH%;"C:\Program Files\Java\jdk1.7.0_79\bin"

当我执行此命令时,当我使用"javac"时,它可以工作,但现在,当我打开其他控制台时,它不起作用,或者当我重新启动控制台时,无法识别此命令.

可能是什么问题呢?

java windows javac java-7 windows-10

22
推荐指数
5
解决办法
14万
查看次数

Java 7当前Lambda提案的复杂性?(2010年8月)

有人说每种编程语言都有其"复杂性预算",可用于实现其目的.但是,如果复杂性预算耗尽,每次微小变化都会变得越来越复杂,并且难以以向后兼容的方式实施.

从2010年8月开始阅读Lambda(≙Lambda表达式,异常透明度,防御方法和方法引用)的当前临时语法后,我想知道Oracle在考虑这些更改时是否完全忽略了Java的复杂性预算.

这些是我正在考虑的问题 - 其中一些更多是关于语言设计的:

  • 拟议的新增内容是否与其他语言选择的方法相当?
  • 通常是否可以在语言中添加此类添加内容并保护开发人员免受实现的复杂性影响?
  • 这些新增内容是否已经达到了Java-as-a-language演变的终点,或者在改变具有巨大历史的语言时是否会出现这种情况?
  • 在语言演变的这一点上,其他语言采用了完全不同的方法吗?

谢谢!

java extension-methods closures language-design java-7

21
推荐指数
1
解决办法
1860
查看次数

GWT与JDK 7新功能的兼容性

例如,JDK 7能够切换(String)而不仅仅是switch(Number/Enum).

如果我写了一个在其代码中有switch(String)的GWT客户端,会有任何问题吗?

switch(String)是我能想到的问题之一.是否存在switch(String)之外的兼容性问题?

java gwt java-7

21
推荐指数
2
解决办法
9601
查看次数

如何在Netbeans中设置java编译器

我正在进入Java7开发,我已经将JDK7添加到Java平台中,并在项目属性中选择了它.

但是当我编译时,我得到的信息如下:

warning: java/lang/Boolean.class(java/lang:Boolean.class): major version 51 is newer than 50, the highest major version supported by this compiler.
It is recommended that the compiler be upgraded.
Run Code Online (Sandbox Code Playgroud)

和

javac: invalid target release: 1.7
/Applications/NetBeans/NetBeans 7.1.app/Contents/Resources/NetBeans/harness/suite.xml:184: The following error occurred while executing this line:
/Applications/NetBeans/NetBeans 7.1.app/Contents/Resources/NetBeans/harness/common.xml:206: Compile failed; see the compiler error output for details.
Run Code Online (Sandbox Code Playgroud)

据我所知,Netbeans正在使用javac 1.6.如何更改为1.7?

编辑:

我正在编写一个NetBeans平台应用程序,并在我设置的主应用程序属性中:Java Platform = JDK 1.7.在其中一个模块的属性中,我设置了Source level = 1.7.

EDIT2

  • Mac OS 10.7.3
  • NetBeans IDE 7.1(Build 201112071828)
  • openjdk …

netbeans javac java-7

21
推荐指数
1
解决办法
5万
查看次数

当通过鼠标更改值时,JList会触发valueChanged两次

我最近遇到了一个java中的错误,其中JList在使用鼠标更改值时将触发valueChanged()方法两次,并且在使用键盘更改值时仅触发一次.我刚刚在Oracle的网站上发现了一个关于此问题的错误(显然,这个错误超过了12年),我想知道是否有人可以向我解释为什么Oracle已经确定这不是缺陷(更不用说getValueIsAdjusting()在使用键盘时返回false.

对于有这个问题的任何人,我发现只是检查何时getValueIsAdjusting()是假的,然后运行我的方法的其余部分将解决问题.

java swing jlist java-7 listselectionlistener

21
推荐指数
2
解决办法
1万
查看次数

Project Coin的集合增强功能将在JDK8中进行吗?

最初Coin项目已增强了对集合的支持,例如list[3]代替list.get(3)和map["hello"] = 27代替的map.put("hello", 27),但他们不是在JDK7.他们会在jdk8吗?对于是或否,我找不到确定的答案.

java jsr java-7 java-8

21
推荐指数
1
解决办法
4276
查看次数

关于MethodHandle API的一些基本问题

如何通过MethodHandles.lookup()?获取所有声明的方法?如何获取所有声明的字段?

什么是差异MethodHandle.invoke(),MethodHandle.invokeExact()和MethodHandle.invokeWithArguments()

此外,我将非常感谢有关使用Methodhandle API for Java devloper的教程.我强调,我正在编写静态类型语言普通旧Java,我不是JVM开发人员,特别是我对整个字节码废话(invokedynamic)并不感兴趣.我想弄清楚如何使用这个新API而不是Java Core API.

EDITED-2:

@Glen Best下面提供了一些我只想提供的参考资料http://www.oraclejavamagazine-digital.com/javamagazine/20130102?pg=52&search_term=methodhandle&doc_id=-1#pg50这正是我想要的.我发现实际上有一些新的词汇表.例如,目标实际上是指MethodHandle(而不是发送的对象),而调用站点实际上是"调用""函数指针"又称MethodHandle的代码.此外,它是一定要了解MethodHandle API是不是更换为核心映像API,而不是suplement它.例如,您无法使用MethodHandle"发现"所有方法,而您需要Core Reflection API.但是当你"找到"你想要的方法时,你可以切换到MethodHandle,例如,绑定一些参数或者将它的签名"改变"(改编)为varargs.

编辑:

我仍在努力找出答案.我写了一些我想与大家分享的测试.

package alexander.berkovich;

import static org.junit.Assert.assertSame;

import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

import org.junit.BeforeClass;
import org.junit.Test;

public class MethodHandlerCleanTest {

    public static MethodHandles.Lookup lookup;

    @BeforeClass
    public static void asetUp(){
        lookup = MethodHandles.lookup();
    }

    public static class Check {
        public void primitive(final int …
Run Code Online (Sandbox Code Playgroud)

java reflection java-7

21
推荐指数
2
解决办法
9171
查看次数

将Optional <Integer>转换为Optional <Long>的好方法

我试图找到一种干净,代码高效的转换Optional<Integer>方式Optional<Long>.我正在使用Guava在Java 7中工作.

所以在代码中的一个地方我创建了一个可选的整数

    Optional<Integer> optionalInt = Optional.fromNullable(someInt);
Run Code Online (Sandbox Code Playgroud)

在另一个领域,我需要它作为一个可选的长.我能想到的最好的事情是:

    Optional<Long> optionalLong = optionalInt.transform(new Function<Integer, Long>() {
        @Override
        public Long apply(Integer inputInt) {
            if (inputInt != null)
                return inputInt.longValue();
            else
                return null;
        }
    });
Run Code Online (Sandbox Code Playgroud)

但这很麻烦,特别是如果你考虑在我使用原始类型时转换类型是多么容易.

有什么好主意吗?

java optional guava java-7

21
推荐指数
1
解决办法
1万
查看次数