V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
enenaaa
V2EX  ›  Java

Java 怎么实现条件编译?

  •  
  •   enenaaa · 2020-09-21 15:06:16 +08:00 · 3012 次点击
    这是一个创建于 1553 天前的主题,其中的信息可能已经有所发展或是发生改变。
    java 基础为零。
    维护的代码里,有个类引用到了 sun.awt.X11 。
    但是又想能跨平台编译,起码在 windows 和 linux 都能用。
    怎么屏蔽平台差异呢?
    难道只能运行时加载类库么。
    16 条回复    2020-09-22 17:59:27 +08:00
    czzt1
        1
    czzt1  
       2020-09-21 15:08:27 +08:00
    不需要处理的吧,直接可以跨平台的
    wanglulei
        2
    wanglulei  
       2020-09-21 16:22:07 +08:00
    jvm 了解一下,java 如何实现跨平台?
    wysnylc
        3
    wysnylc  
       2020-09-21 16:23:23 +08:00
    去了解下 JVM 跨平台
    enenaaa
        4
    enenaaa  
    OP
       2020-09-21 16:38:52 +08:00
    @czzt1 oracle jdk1.8 的 linux 版本有 sun.awt.X11 包,windows 版本没有。
    我现在是想在 linux 用这个包, 在 windows 上用其他方式代替。
    在代码里怎么屏蔽差异?
    import 可以按条件区分平台么。
    InkStone
        5
    InkStone  
       2020-09-21 16:44:14 +08:00
    你可以在构建工具上下功夫。比如 gradle 就支持不同的 flavor 使用不同的源代码……
    chendy
        6
    chendy  
       2020-09-21 16:44:51 +08:00
    不知道这个类是干啥的,但是明显 win 下是木有的,所以
    1. 换可以跨平台的实现方式
    2. 不同平台不同实现,运行时判断环境使用特定实现
    DsuineGP
        7
    DsuineGP  
       2020-09-21 16:49:20 +08:00
    把不同平台的依赖都打包进去,运行时再根据平台判断加载哪个库
    palmers
        8
    palmers  
       2020-09-21 17:06:05 +08:00
    可以使用 SPI 来做 然后做一个具体平台的 provider 引入
    limuyan44
        9
    limuyan44  
       2020-09-21 17:09:03 +08:00   ❤️ 1
    你要不试试 Class.forName("sun.awt.X11")
    heian0224
        10
    heian0224  
       2020-09-21 18:29:58 +08:00 via Android
    用注解处理器编译器处理
    lewis89
        11
    lewis89  
       2020-09-21 18:41:40 +08:00
    javassit 可以在运行时 修改代码 拼接代码
    enenaaa
        12
    enenaaa  
    OP
       2020-09-21 19:09:38 +08:00
    @lewis89
    @heian0224
    @limuyan44
    @palmers
    @chendy
    @DsuineGP 决定用反射来解决了。
    Kaiv2
        13
    Kaiv2  
       2020-09-21 19:18:15 +08:00 via Android
    应该是动态类加载
    Citrus
        14
    Citrus  
       2020-09-21 19:31:47 +08:00
    为啥要反射???用的时候做个判断,找不到这个类不要报错直接跳过这段逻辑不就好了?
    akiza
        15
    akiza  
       2020-09-22 08:51:52 +08:00
    @Citrus import 不可以判断这个存不存在吧
    heian0224
        16
    heian0224  
       2020-09-22 17:59:27 +08:00 via Android
    反射效率不高的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2600 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:05 · PVG 19:05 · LAX 03:05 · JFK 06:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.