我正在看下面的Stack Overflow答案: 如何在运行时更改Spring的@Scheduled fixedDelay
在代码中有以下行:
schedulerFuture = taskScheduler.schedule(() -> { }, this);
Run Code Online (Sandbox Code Playgroud)
我想知道lambda () -> {}在该代码中的含义.我需要在不使用lambdas的情况下编写它.
到目前为止,我们一直在使用Findbugs JSR-305注释(com.google.code.findbugs:jsr305),包括工具支持(Sonar,Eclipse,Findbugs,...)在内的一切工作正常.
但是我们的理解是Java 9中的Jigsaw将打破JSR-305注释(不允许在两个模块中使用一个包).这在JavaOne 2015上得到了证实.Oracle的推理是JSR-305从未发生过,JSR-250必须支持这些注释.
我们正在寻找可以在Java 8和Java 9中工作的JSR-305注释的替换.如果历史是任何指南,Java 9 GA和Java 8 EOL之间的时间将相当短,我们想修复我们的任何不兼容性提前编码.从理论上讲,我们可以升级JDK的注释模块,但是在我们的工具链中执行此操作似乎需要做很多工作.
annotations static-analysis jsr305 java-platform-module-system java-9
Java 9附带了用于创建不可变列表的便捷工厂方法.最后,列表创建非常简单:
List<String> list = List.of("foo", "bar");
Run Code Online (Sandbox Code Playgroud)
但是这个方法有12个重载版本,11个有0到10个元素,另一个有var args.
static <E> List<E> of(E... elements)
Run Code Online (Sandbox Code Playgroud)
同样是与案件Set和Map.
由于存在var args方法,有多少11种方法有什么意义呢?
我认为var-args创建一个数组,所以其他11个方法可以跳过创建一个额外的对象,在大多数情况下会有0-10个元素.还有其他原因吗?
在下面的示例中,我有两个线程使用的一个文件(在实际示例中,我可以有任意数量的线程)
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class A {
static volatile boolean running = true;
public static void main(String[] args) throws IOException, InterruptedException {
String name = "delete.me";
new File(name).deleteOnExit();
RandomAccessFile raf = new RandomAccessFile(name, "rw");
FileChannel fc = raf.getChannel();
Thread monitor = new Thread(() -> {
try {
while (running) {
System.out.println(name + " is " + (fc.size() >> 10) + " KB");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println("Interrupted");
Thread.currentThread().interrupt(); …Run Code Online (Sandbox Code Playgroud) 假设我有一个带groupId = org.abc和的库artifactId = myLibrary.模块名称的推荐名称是什么:myLibrary或org.abc.myLibrary?是否有任何命名方案的官方指南?
我正在研究Immutable收藏的工厂方法.我看到该Set.of()方法有10个varargs重载(相同Map.of()).我真的不明白为什么会这么多.最后,ImmutableCollections.SetN<>(elements)无论如何都会调用该函数.
在文档中我发现了这个:
虽然这会在API中引入一些混乱,但它避免了varargs调用引起的数组分配,初始化和垃圾收集开销.
杂乱的确是值得的性能提升吗?如果是,理想情况下是否会为任何N元素创建单独的方法?
最近我从官方网站安装了JDK 9和Apache Cassandra.但是现在当我在前台启动cassandra时,我得到了这样的信息:
apache-cassandra-3.11.1/bin$ ./cassandra -f
[0.000s][warning][gc] -Xloggc is deprecated. Will use -Xlog:gc:/home/mmatak/monero/apache-cassandra-3.11.1/logs/gc.log instead.
intx ThreadPriorityPolicy=42 is outside the allowed range [ 0 ... 1 ]
Improperly specified VM option 'ThreadPriorityPolicy=42'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
Run Code Online (Sandbox Code Playgroud)
到目前为止,我没有找到任何解决方案.Java 9和Cassandra可能还不兼容吗?这也是提到的问题 - #CASSANDRA-13107
但我不知道如何"删除旗帜"?在哪里可以覆盖或删除此标志?
请考虑以下代码:
public class A {
public static void main(String[] args) {
Runnable test1 = ((I)(new I() {}))::test; // compiles OK
Runnable test2 = ((new I() {}))::test; // won't compile
}
interface I {
private void test() {}
}
}
Run Code Online (Sandbox Code Playgroud)
我真的不明白......我明白这种test()方法是私密的.但是,如果我们将匿名类强制转换为其接口,会发生什么变化((I)(new I() {}))?更确切地说,我希望看到一个允许该技巧的特定JLS点.
PS我已将其报告为编译器的错误(ID:9052217).在我看来,Runnable test2 = ((new I() {}))::test;在这种特殊情况下应该编译得很好.
PPS到目前为止,根据我的报告创建了一个错误:https://bugs.openjdk.java.net/browse/JDK-8194998.它可能会被关闭为"不会修复"或者什么.
请查看以下编辑内容
我正在尝试创建一个JShell实例,它允许我访问,并允许我与它创建的JVM中的对象进行交互.这适用于在编译时可用的类但对于动态加载的类失败.
public class Main {
public static final int A = 1;
public static Main M;
public static void main(String[] args) throws Exception {
M = new Main();
ClassLoader cl = new URLClassLoader(new URL[]{new File("Example.jar").toURL()}, Main.class.getClassLoader());
Class<?> bc = cl.loadClass("com.example.test.Dynamic");//Works
JShell shell = JShell.builder()
.executionEngine(new ExecutionControlProvider() {
@Override
public String name() {
return "direct";
}
@Override
public ExecutionControl generate(ExecutionEnv ee, Map<String, String> map) throws Throwable {
return new DirectExecutionControl();
}
}, null)
.build(); …Run Code Online (Sandbox Code Playgroud) 在stackoverflow上多次提到自动模块,但我找不到自动模块的完整,简洁和自给自足的定义.
那么,什么是自动模块?它是否导出所有包裹?它打开所有包裹吗?它是否读取所有其他模块?
java-9 ×10
java ×8
collections ×2
java-module ×2
java-platform-module-system ×2
annotations ×1
cassandra ×1
filechannel ×1
interrupt ×1
java-7 ×1
java-8 ×1
jshell ×1
jsr305 ×1
jvm ×1
lambda ×1