java 基础为零。
维护的代码里,有个类引用到了 sun.awt.X11 。
但是又想能跨平台编译,起码在 windows 和 linux 都能用。
怎么屏蔽平台差异呢?
难道只能运行时加载类库么。
维护的代码里,有个类引用到了 sun.awt.X11 。
但是又想能跨平台编译,起码在 windows 和 linux 都能用。
怎么屏蔽平台差异呢?
难道只能运行时加载类库么。
|
czzt1Sep 21, 2020
1
不需要处理的吧,直接可以跨平台的
|
|
wangluleiSep 21, 2020
2
jvm 了解一下,java 如何实现跨平台?
|
|
wysnylcSep 21, 2020
3
去了解下 JVM 跨平台
|
|
4
@czzt1 oracle jdk1.8 的 linux 版本有 sun.awt.X11 包,windows 版本没有。
我现在是想在 linux 用这个包, 在 windows 上用其他方式代替。 在代码里怎么屏蔽差异? import 可以按条件区分平台么。 |
|
InkStoneSep 21, 2020
5
你可以在构建工具上下功夫。比如 gradle 就支持不同的 flavor 使用不同的源代码……
|
|
chendySep 21, 2020
6
不知道这个类是干啥的,但是明显 win 下是木有的,所以
1. 换可以跨平台的实现方式 2. 不同平台不同实现,运行时判断环境使用特定实现 |
|
DsuineGPSep 21, 2020
7
把不同平台的依赖都打包进去,运行时再根据平台判断加载哪个库
|
|
palmersSep 21, 2020
8
可以使用 SPI 来做 然后做一个具体平台的 provider 引入
|
|
9
你要不试试 Class.forName("sun.awt.X11")
|
|
heian0224Sep 21, 2020 via Android
10
用注解处理器编译器处理
|
|
lewis89Sep 21, 2020
11
javassit 可以在运行时 修改代码 拼接代码
|
|
Kaiv2Sep 21, 2020 via Android
13
应该是动态类加载
|
|
CitrusSep 21, 2020
14
为啥要反射???用的时候做个判断,找不到这个类不要报错直接跳过这段逻辑不就好了?
|
|
heian0224Sep 22, 2020 via Android
16
反射效率不高的。
|