像这样的东西:
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.
我不喜欢下面的代码看起来如何,我想知道如何使用三元运算符来做到这一点:
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"选项.
所以我可能错过了一些东西.它是什么?
我正在通过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 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应用程序包的子文件夹中,我有一个"文档"子文件夹.我尝试过多种方法但无济于事:
-Duser.dirJVMArgument属性) - 该文件看似具有正确的路径,但file.exists()返回false.getClass().getResource()仍然返回null)我的问题更多的是为什么类型而不是如何.
我知道在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 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编写我调用zip()方法接收一些返回Observable <...>的方法.
目前我无法进入下面的地图,这可能是因为其中一个方法尚未返回值.(虽然似乎所有的方法都被称为.)
有没有办法调试过程,看看它为何陷入困境?
谢谢.
这是简单的代码
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) 我使用以下库在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) 今天,我遇到了一个场景,我没有覆盖子类中接口的所有方法.但是,当我尝试创建子类的对象时,它仍然工作正常.到目前为止,我的假设是除非解决了所有编译错误,否则我们无法创建对象.
请详细说明一下.
我已经采取了示例.
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对象)是错误的,请告诉我