标签: java-7

将方法声明为`return this`的任何好方法?

像这样的东西:

class C {

    typeof(this) foo() { return this; }

}
Run Code Online (Sandbox Code Playgroud)

好吧,我知道在Java 6中这是不可能的,所以我很高兴听到我是否可以在Java 7中完成它.

编辑

这对链接方法调用很有用,并且避免创建临时局部变量,如下所示:

class Entity {

    typeof(this) refresh();

    typeof(this) clone();

    typeof(this) detach();

}

class FooEntity extends Entity {

    @Override
    typeof(this) detach() {
        fooLink21.removeRef(this); 
        bar39.detach(); 
        return this; 
    }

    void doSomeInteresting() {}
}

fooEntity.clone().detach().doSomeInteresting();
Run Code Online (Sandbox Code Playgroud)

还有更多.

我认为将此函数添加到编译器应该很容易,也许我应该入侵openjdk或者gcj?

顺便说一句,我从未成功重建openjdk.

java generics design-patterns crtp java-7

3
推荐指数
1
解决办法
186
查看次数

在JDK7中,有没有办法在移动文件时使用三元运算符来有条件地使用REPLACE_EXISTING?

我不喜欢下面的代码看起来如何,我想知道如何使用三元运算符来做到这一点:

if (isIndexed) {
    Files.move(source, destination);
}
else {
    Files.move(source, destination, StandardCopyOption.REPLACE_EXISTING);
}
Run Code Online (Sandbox Code Playgroud)

我期待的东西看起来像:

Files.move(source, destination, isIndexed ? xxxx : StandardCopyOption.REPLACE_EXISTING);
Run Code Online (Sandbox Code Playgroud)

如果我可以使用某种"默认"复制选项,我认为这将是我正在寻找的.但是StandardCopyOption的枚举没有"NONE"选项.

所以我可能错过了一些东西.它是什么?

java java-7

3
推荐指数
1
解决办法
100
查看次数

使用自动安装JDK在Windows 7上安装和配置Jenkins

我正在通过jenkins-the-definitive-guide.我使用Windows安装程序在Windows 7 64位上安装了Jenkins.我已经在第一次构建时配置了构建和设置Jenkins以自动安装JDK 7u3.当构建开始时,我在控制台日志中看到了这一点:

Started by user anonymous
Building in workspace C:\Program Files (x86)\Jenkins\workspace\gameoflife-default
Installing C:\Program Files (x86)\Jenkins\tools\JDK_7u3\jdk.exe 
[JDK_7u3] $ "C:\Program Files (x86)\Jenkins\tools\JDK_7u3\jdk.exe" /s /v /qn /L '\"C:\Program Files (x86)\Jenkins\tools\JDK_7u3\jdk.exe.install.log\"' REBOOT=ReallySuppress 'INSTALLDIR=\"C:\Program Files (x86)\Jenkins\tools\JDK_7u3\"'
Run Code Online (Sandbox Code Playgroud)

它永远不会超越这个.

我已经尝试过: - 确保exe不被阻止 - 确保服务帐户具有管理员权限 - 尝试安装其他JDK.

有什么想法吗?

java windows-7 java-7 jenkins

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

如何从OS X,Java 7上运行的Java .app包中访问资源文件?

请注意,我在谈论Java 7,因为Java .app包的info.plist规范似乎自Java 6以来有所改变.

目前我的代码如下所示:

  File file = new File( "documentation/index.html" );
  if (file.exists()) {
      // opens the URI in the browser
      GUIUtils.openURI( file.toURI() );
  } else {
      // opens the URI in the browser
      GUIUtils.openURI( getClass().getResource( "/documentation/index.html" ).toURI() );
  }
Run Code Online (Sandbox Code Playgroud)

在Java应用程序包的子文件夹中,我有一个"文档"子文件夹.我尝试过多种方法但无济于事:

  • 在info.plist中,将工作目录设置为Java文件夹(具有-Duser.dirJVMArgument属性) - 该文件看似具有正确的路径,但file.exists()返回false.
  • 尝试将ClassPath设置为Java文件夹.(getClass().getResource()仍然返回null)

java macos resource-files app-bundle java-7

3
推荐指数
1
解决办法
1208
查看次数

Java 7 Try-With-Resources(AutoCloseable)实现

我的问题更多的是为什么类型而不是如何.

我知道在Java 7中有以下工作:

    try (
            FileInputStream in = new FileInputStream(source);
            FileOutputStream out = new FileOutputStream(target);
    ) {
        .....................
      } catch (......) {
       ...............
      }
Run Code Online (Sandbox Code Playgroud)

以下是语法错误:

    FileInputStream in;
    FileOutputStream out;
    try (
            in = new FileInputStream(source);
            out = new FileOutputStream(target);
    ) {
        .....................
      } catch (......) {
       ...............
      }
Run Code Online (Sandbox Code Playgroud)

我很好奇,为什么它如此重要Closable/ Autoclosable引用是本地的try块?如果我们不拥有它而不是关闭它是危险的,这只是逻辑吗?

java try-catch stream java-7

3
推荐指数
1
解决办法
2798
查看次数

调整Java 7以匹配Java 6的性能

我们有一个简单的单元测试作为我们的性能测试套件的一部分,我们用它来验证基本系统是否合理并在我们开始测试代码之前执行.这样我们通常会验证机器是否适合运行实际的性能测试.

当我们使用此测试比较Java 6和Java 7时,Java 7需要相当长的时间才能执行!我们看到Java 6平均为22秒,Java 7平均为24秒.测试只计算fibonacci,因此在这里只有单个线程中的字节码执行应该与I/O或其他任何东西相关.

目前我们使用带有或不带"-server"的Windows上的默认设置运行它,使用32位和64位JVM,所有运行都表明Java 7的类似降级.

哪些调优选项可能适合尝试将Java 7与Java 6相匹配?

public class BaseLinePerformance {

    @Before
    public void setup() throws Exception{
        fib(46);
    }

    @Test
    public void testBaseLine() throws Exception {
        long start = System.currentTimeMillis();
        fib(46);
        fib(46);
        System.out.println("Time: " + (System.currentTimeMillis() - start));
    }

    public static void fib(final int n) throws Exception {
        for (int i = 0; i < n; i++) {
            System.out.println("fib(" + i + ") = " + fib2(i));
        }
    }

    public static int fib2(final int n) …
Run Code Online (Sandbox Code Playgroud)

java performance benchmarking java-7

3
推荐指数
1
解决办法
3353
查看次数

调试停止的RxJava zip运算符

用Java编写我调用zip()方法接收一些返回Observable <...>的方法.

目前我无法进入下面的地图,这可能是因为其中一个方法尚未返回值.(虽然似乎所有的方法都被称为.)

有没有办法调试过程,看看它为何陷入困境?
谢谢.

java multithreading java-7 rx-java

3
推荐指数
1
解决办法
382
查看次数

Java 8不兼容类型

这是简单的代码

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

public class SimpleTest {

    public static void main(String[] args) {
    final ArrayList<Map<String, Object>> maps = newArrayList(
        createMap("1", "a", Collections.EMPTY_MAP, Collections.EMPTY_MAP),
        createMap("2", "b", Collections.EMPTY_MAP, Collections.EMPTY_MAP),
        createMap("3", "c", Collections.EMPTY_MAP, Collections.EMPTY_MAP)
    ); 

    System.out.println(" maps = " + maps);
    }

    public static Map<String, Object> createMap(String value1, String value2, Map<String, Object> object1, Map<String, Object> object2) {
       Map<String, Object> map = new HashMap<>();
       map.put("value1", value1);
       map.put("value1", value1);
       map.put("object1", object1);
       map.put("object2", object2);
       return map;
    }    

    public static <E> …
Run Code Online (Sandbox Code Playgroud)

java compatibility javac java-7 java-8

3
推荐指数
1
解决办法
1996
查看次数

java.lang.ClassFormatError:使用PowerMock时无效的方法代码长度

我使用以下库在jdk7中使用PowerMock运行JUnit案例:

cglib-nodep-2.2.2.jar
javassist-3.19.0-GA.jar
junit-4.12.jar
mockito-all-1.10.19.jar
objenesis-2.1.jar
powermock-mockito-1.6.2-full.jar
Run Code Online (Sandbox Code Playgroud)

下面是我使用PowerMock进行单元测试的代码片段

@RunWith(PowerMockRunner.class)
@PrepareForTest(ValidateBindingImpl.class)
public class ValidateBindingImplTest{

//more code follows
}
Run Code Online (Sandbox Code Playgroud)

执行此测试用例时,我收到以下错误:

java.lang.ClassFormatError: Invalid method Code length 119842 in class file com/v1/ValidateBindingImpl
    at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.lang.ClassLoader.defineClass(ClassLoader.java:465)
at org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.java:269)
at org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java:180)
at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:68)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:249)
at sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:95)
at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:107)
at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:31)
at sun.reflect.annotation.AnnotationParser.parseSig(AnnotationParser.java:370)
at sun.reflect.annotation.AnnotationParser.parseClassValue(AnnotationParser.java:351)
at sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.java:653)
at sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:460)
at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:286)
at sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:222)
at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:69)
at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:52)
at java.lang.Class.initAnnotationsIfNecessary(Class.java:3079)
at java.lang.Class.getAnnotation(Class.java:3038)
at org.junit.internal.MethodSorter.getDeclaredMethods(MethodSorter.java:52)
at org.junit.internal.runners.TestClass.getAnnotatedMethods(TestClass.java:45) …
Run Code Online (Sandbox Code Playgroud)

junit powermock java-7

3
推荐指数
2
解决办法
6159
查看次数

即使在Java中出现编译错误,我也能够创建一个类对象

今天,我遇到了一个场景,我没有覆盖子类中接口的所有方法.但是,当我尝试创建子类的对象时,它仍然工作正常.到目前为止,我的假设是除非解决了所有编译错误,否则我们无法创建对象.

请详细说明一下.

我已经采取了示例.

interface Parent {
   public void test();
}

class Child implements Parent {
   public void print() {
      System.out.println("Didn't expect to print");
   }
}
Run Code Online (Sandbox Code Playgroud)

Child类给了我编译时错误,要求我从界面覆盖方法.忽略错误,当我尝试创建下面的对象并执行下一个语句时,它给出了底部指示的输出.

Child child = new Child();
child.print();
Run Code Online (Sandbox Code Playgroud)

输出:

Didn't expect to print
Run Code Online (Sandbox Code Playgroud)

PS:我在Java 7上试过这个

如果我的基本理解(在不解决编译错误的情况下无法创建Java对象)是错误的,请告诉我

java java-7

3
推荐指数
1
解决办法
64
查看次数