Java 怎么实现条件编译? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
enenaaa
V2EX    Java

Java 怎么实现条件编译?

  •  
  •   enenaaa 2020-09-21 15:06:16 +08:00 3430 次点击
    这是一个创建于 1853 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 iport 不可以判断这个存不存在吧
    heian0224
        16
    heian0224  
       2020-09-22 17:59:27 +08:00 via Android
    反射效率不高的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2751 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 09:28 PVG 17:28 LAX 02:28 JFK 05:28
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86