Java 怎么实现条件编译? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
enenaaa
V2EX    Java

Java 怎么实现条件编译?

  •  
  •   enenaaa Sep 21, 2020 3807 views
    This topic created in 2047 days ago, the information mentioned may be changed or developed.
    java 基础为零。
    维护的代码里,有个类引用到了 sun.awt.X11 。
    但是又想能跨平台编译,起码在 windows 和 linux 都能用。
    怎么屏蔽平台差异呢?
    难道只能运行时加载类库么。
    16 replies    2020-09-22 17:59:27 +08:00
    czzt1
        1
    czzt1  
       Sep 21, 2020
    不需要处理的吧,直接可以跨平台的
    wanglulei
        2
    wanglulei  
       Sep 21, 2020
    jvm 了解一下,java 如何实现跨平台?
    wysnylc
        3
    wysnylc  
       Sep 21, 2020
    去了解下 JVM 跨平台
    enenaaa
        4
    enenaaa  
    OP
       Sep 21, 2020
    @czzt1 oracle jdk1.8 的 linux 版本有 sun.awt.X11 包,windows 版本没有。
    我现在是想在 linux 用这个包, 在 windows 上用其他方式代替。
    在代码里怎么屏蔽差异?
    import 可以按条件区分平台么。
    InkStone
        5
    InkStone  
       Sep 21, 2020
    你可以在构建工具上下功夫。比如 gradle 就支持不同的 flavor 使用不同的源代码……
    chendy
        6
    chendy  
       Sep 21, 2020
    不知道这个类是干啥的,但是明显 win 下是木有的,所以
    1. 换可以跨平台的实现方式
    2. 不同平台不同实现,运行时判断环境使用特定实现
    DsuineGP
        7
    DsuineGP  
       Sep 21, 2020
    把不同平台的依赖都打包进去,运行时再根据平台判断加载哪个库
    palmers
        8
    palmers  
       Sep 21, 2020
    可以使用 SPI 来做 然后做一个具体平台的 provider 引入
    limuyan44
        9
    limuyan44  
       Sep 21, 2020   1
    你要不试试 Class.forName("sun.awt.X11")
    heian0224
        10
    heian0224  
       Sep 21, 2020 via Android
    用注解处理器编译器处理
    lewis89
    11
    lewis89  
       Sep 21, 2020
    javassit 可以在运行时 修改代码 拼接代码
    enenaaa
        12
    enenaaa  
    OP
       Sep 21, 2020
    @lewis89
    @heian0224
    @limuyan44
    @palmers
    @chendy
    @DsuineGP 决定用反射来解决了。
    Kaiv2
        13
    Kaiv2  
       Sep 21, 2020 via Android
    应该是动态类加载
    Citrus
        14
    Citrus  
       Sep 21, 2020
    为啥要反射???用的时候做个判断,找不到这个类不要报错直接跳过这段逻辑不就好了?
    akiza
        15
    akiza  
       Sep 22, 2020
    @Citrus import 不可以判断这个存不存在吧
    heian0224
        16
    heian0224  
       Sep 22, 2020 via Android
    反射效率不高的。
    About     Help     Advertise     Blog     API     FAQ     Solana     2417 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 56ms UTC 15:54 PVG 23:54 LAX 08:54 JFK 11:54
    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