如果OutOfMemoryError非常不鼓励捕获,因为在捕获错误之后您可能不知道JVM的状况,为什么JVM不会简单地终止并以某种方式通知用户而不是抛出错误?
我试图在我自己的插件中填充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) ImmutableList的文件说:
尽管此类不是最终的,但它不能被子类化,因为它没有公共或受保护的构造函数.
我知道它有点牵强,但是可以ImmutableList在com.google.common.collect包中创建一个子类(因为它的构造函数不是私有的,但是包私有),这是可变的.从那时起,没有人获得对a的引用ImmutableList可以确定它确实是不可变的.这不是打破了目的ImmutableList吗?
我想知道为什么一次分配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中的泛型,所以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到两个变量x和y,因为类型Any是基类中的每科特林级.事实证明我不能,我不明白为什么.
我想使用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.
java ×4
arrays ×1
ecmascript-5 ×1
generics ×1
gradle ×1
guava ×1
java-7 ×1
javascript ×1
kotlin ×1
performance ×1