小编Kat*_*ona的帖子

为什么JVM不会简单地终止而不是抛出OOME?

如果OutOfMemoryError非常不鼓励捕获,因为在捕获错误之后您可能不知道JVM的状况,为什么JVM不会简单地终止并以某种方式通知用户而不是抛出错误?

java

11
推荐指数
1
解决办法
315
查看次数

如何从另一个插件应用Gradle插件?

我试图在我自己的插件中填充android插件,但是当我尝试应用我的插件时,构建失败并出现异常:

A problem occurred evaluating root project 'myproj'.
> Failed to apply plugin [id 'com.mycomp.build']
  > Failed to apply plugin [id 'android-library']
    > Plugin with id 'android-library' not found.
Run Code Online (Sandbox Code Playgroud)

以下是我在自己的插件实现中应用android插件的方法:

// build.gradle
apply plugin: 'groovy'

version = '1.0'
group = 'com.mycomp'

dependencies {
    compile gradleApi()
    compile localGroovy()
}

// Build.groovy
package com.mycomp

import org.gradle.api.Plugin
import org.gradle.api.Project

class Build implements Plugin<Project> {
    void apply(Project project) {
        println 'Hello from com.mycomp.Build'
        project.beforeEvaluate {
            buildscript.configurations.classpath += 
                'com.android.tools.build:gradle:1.0.0-rc1'
        }

        project.configure(project) {
            buildscript.repositories.mavenCentral()
            apply plugin: …
Run Code Online (Sandbox Code Playgroud)

gradle android-gradle-plugin

10
推荐指数
2
解决办法
6275
查看次数

guava的ImmutableList并不是真正不可变的

ImmutableList文件说:

尽管此类不是最终的,但它不能被子类化,因为它没有公共或受保护的构造函数.

我知道它有点牵强,但是可以ImmutableListcom.google.common.collect包中创建一个子类(因为它的构造函数不是私有的,但是包私有),这是可变的.从那时起,没有人获得对a的引用ImmutableList可以确定它确实是不可变的.这不是打破了目的ImmutableList吗?

java guava

6
推荐指数
2
解决办法
598
查看次数

2D阵列分配的性能

我想知道为什么一次分配2D int数组(new int[50][2])执行比分别分配更差,即new int[50][]先执行,然后new int[2]逐个执行.这是一个非专业的基准代码:

public class AllocationSpeed {

    private static final int ITERATION_COUNT = 1000000;

    public static void main(String[] args) {
        new AllocationSpeed().run();
    }

    private void run() {
        measureSeparateAllocation();
        measureAllocationAtOnce();
    }

    private void measureAllocationAtOnce() {
        Stopwatch stopwatch = Stopwatch.createStarted();
        for (int i = 0; i < ITERATION_COUNT; i++) {
            allocateAtOnce();
        }
        stopwatch.stop();
        System.out.println("Allocate at once: " + stopwatch);
    }

    private int allocateAtOnce() {
        int[][] array = new int[50][2];
        return array[10][1];
    }

    private void …
Run Code Online (Sandbox Code Playgroud)

java arrays performance

6
推荐指数
1
解决办法
148
查看次数

Kotlin的逆差异

我从来没有真正理解Java中的泛型,所以Kotlin似乎就是这样.考虑以下代码片段(这是一个人为的例子):

class AnyComparator: Comparator<Any> {
    override fun compare(o1: Any, o2: Any): Int {
        TODO("not implemented")
    }
}


fun <T> test() {
    val x: Comparator<in Double> = AnyComparator() // OK!
    val y: Comparator<in T> = AnyComparator() // Compilation error
}
Run Code Online (Sandbox Code Playgroud)

第二个赋值因错误而失败

Type mismatch. 
Required: kotlin.Comparator<in T>
Found: AnyComparator
Run Code Online (Sandbox Code Playgroud)

现在,如果我理解正确,in修饰符指示T仅由泛型类型消耗Comparator(它使逆变),所以我应该能够分配任何Comparator类型参数E,它是基类T.在此基础上,我应该能够分配AnyComparator到两个变量xy,因为类型Any是基类中的每科特林级.事实证明我不能,我不明白为什么.

generics contravariance kotlin

6
推荐指数
1
解决办法
406
查看次数

在Java 7上运行符合ECMAScript 5的javascript

我想使用Java 7的嵌入式javascript引擎运行javascript.我尝试运行的代码符合ECMAScript 5,这应该不是问题,因为嵌入式Rhino的版本是支持它的1.7版本3.但是,运行以下代码段不起作用:

    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName("JavaScript");
    engine.eval("var char = 'a';");
Run Code Online (Sandbox Code Playgroud)

它失败并显示错误missing variable name,表明它char是保留关键字.但是,charECMAScript 5中不再保留,所以我完全糊涂了.问题是哪个javascript版本应该与java 7中的嵌入式Rhino一起使用?

我使用的是java 1.7.0_80,引擎报告的语言版本是1.8引擎版本1.7 release 3 PRERELEASE.

javascript java java-7 ecmascript-5

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