标签: source-compatibility

编写使用类的两个实现之一编译的Java代码

我正在用Java编写一些FFI代码,这些代码大量使用sun.misc.Unsafe.

在Java 9中,这个类将变得不可访问,并且将成为jdk.unsupported.Unsafe.我想编写我的代码,以便它现在可以工作,但继续在Java 9中工作.

最黑客的方法是什么?我更喜欢二进制兼容性,但源兼容性也没关系.

编辑:每次Unsafe调用方法时,我100%不能使用反射 - 甚至是虚拟调度.大多数这些方法都编译为单个机器指令.因此,性能真的很重要.拥有包装器是可以的 - 但只有当我确定JIT每次都会内联它们时才会这样.

我目前的计划是在运行时加载适当的类.

java ffi binary-compatibility source-compatibility

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

Gradle / IntelliJ IDEA:sourceCompatibility 在 IDE 设置中恢复为以前的值

在我的 IntelliJ/Grade/Java 项目中设置sourceCompatibilitytargetCompatibilityJavaVersion.VERSION_11没有预期的效果。

即使我设置项目SDK项目语言水平项目结构手动11,之后我恢复了8和6 刷新摇篮项目(或导入的变化)。见下图:

在此处输入图片说明


确保我创建了一个新项目并在其中测试这些。这是它的树视图:

在此处输入图片说明

唯一的build.gradle文件:

plugins {
    id 'java'
}

group 'test'
version '1.0-SNAPSHOT'

sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
}
Run Code Online (Sandbox Code Playgroud)

Gradle 版本4.10.2与您在gradle-wrapper.properties文件中看到的一样

#Tue Nov 13 00:53:45 IRST 2018
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip
Run Code Online (Sandbox Code Playgroud)

这是环境信息:

IntelliJ IDEA 2018.1.5 (Community Edition) …
Run Code Online (Sandbox Code Playgroud)

intellij-idea gradle java-8 source-compatibility java-11

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

sourceCompatibility 8 和 11 有什么区别?当它们设置为不同的值时会发生什么?

当我的目标 Android API 级别 21 时,我将其设置为sourceCompatibility11 或 8,以及我的构建 gradle 中的差异是什么,我总是这样设置

 compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
Run Code Online (Sandbox Code Playgroud)

但在 android studio Electric Eel 上它说: Starting with Android Gradle plugin 7.4.0-alpha04, AGP ships wth JVM 11 bytecode.

java android gradle android-activity source-compatibility

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