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

Java 工具箱

  •  
  •   SeanDragon
    SeanDragon 2018-01-17 17:55:42 +08:00 8075 次点击
    这是一个创建于 2830 天前的主题,其中的信息可能已经有所发展或是发生改变。

    推广一个历经开发周期两年,并且应用过千万级别项目的工具箱。 大家看了之后可以多多给我提建议,也欢迎大佬们 star fork。

    common

    • 数据的处理
    • 文件的处理
    • script 引擎的封装
    • 系统方面查询的封装
    • 日期对象的封装 DatePlus
    • 数值对象的封装 Decimal

    http

    • 统一发送对象为 HttpSend
    • 统一接收对象为 HttpReceive
    • 三个版本的 http 客户端( Jdk、Netty 和 OkHttp )

    mail

    • 封装 JavaMail,并采用了队列等方法提高性能,并简化了发送过程

    security

    • 封装了 jdk 和 bouncycastle 中几十种常见加密方式

    all

    • 如果需要使用上述多个模块,可以导入 all 模块以使用所有模块

    Thanks(ω)

    第 1 条附言    2018-01-17 18:30:44 +08:00
    50 条回复    2018-03-02 14:29:35 +08:00
    Terry05
        1
    Terry05  
       2018-01-17 18:02:10 +08:00
    然而地址呢?
    项目名称呢?
    xiqian
        2
    xiqian  
       2018-01-17 18:03:06 +08:00
    连接呢
    xiqian
        3
    xiqian  
       2018-01-17 18:05:20 +08:00   1
    SeanDragon
        4
    SeanDragon  
    OP
       2018-01-17 18:09:35 +08:00
    @Terry05 #1 太抱歉了 忘加上了 3L 的正解
    SeanDragon
        5
    SeanDragon  
    OP
       2018-01-17 18:10:34 +08:00
    https://github.com/SeanDragon/protools
    链接地址,多谢三楼。
    SeanDragon
        6
    SeanDragon  
    OP
       2018-01-17 18:27:08 +08:00
    顺便求个职
    简历地址 https://seandragon.github.io
    前辈们,看过来,等你把我招到碗里来。
    TimePPT
        7
    TimePPT  
    PRO
       2018-01-17 18:30:17 +08:00   1
    东西是好东西

    不过善意提醒下,如果是在职期间的「职务成果」,未经公司允许是不能直接以个人成果对外公开使用的。这块做好规避,否则即使公司解散了,公司法人还是能追责的。

    当然,公司要是你自己的随便整。
    SeanDragon
        8
    SeanDragon  
    OP
       2018-01-17 18:35:03 +08:00
    @TimePPT #7 谢谢前辈提醒,写这个项目的想法是我个人提出的,使用到公司项目中这个想法也是我提出的,
    并且领导同意了,而且后续两年期间中的开发 99%也都是我自己开发的
    cchange
        9
    cchange  
       2018-01-17 18:41:05 +08:00 via iPhone
    看起来不错
    请问是否有 C#类似的工具箱呢?
    SeanDragon
        10
    SeanDragon  
    OP
       2018-01-17 18:44:55 +08:00
    @cchange #9 抱歉 C#语言的我没有开发
    TimePPT
        11
    TimePPT  
    PRO
       2018-01-17 18:53:55 +08:00   1
    @SeanDragon 这个……和项目是谁提出及谁主要做的没关系

    「职务成果是指单位工作人员为了完成本职工作或主要利用了本单位的物质技术条件所产生的智力成果。职务成果是单位工作人员基于职务行为或职务便利进行创造性劳动产生的智力成果,单位依法对之所享有的专有权利。」

    简而言之就是,公司给你发工资了,你利用公司的物质资源(软硬件、时间等)做了一套东西出来,你享有部分权利(署名权、各类物质奖励所得等),但总体归属是归公司的,没有公司同意你是不能擅自将这部分成果有偿或无偿转让、公开的。

    比如鄙司,有很多部门和组都在维护公司的开源项目,但都是以公司名义进行,且在开源前是经高层领导审批,法务报备的

    这块我比较敏感也是曾经有个哥们碰过线被前公司搞了,所以善意提醒下。
    SeanDragon
        12
    SeanDragon  
    OP
       2018-01-17 18:58:53 +08:00
    @TimePPT #11 嗯 非常谢谢前辈提醒 我已知利害关系,该项目开源没有问题。
    TimePPT
        13
    TimePPT  
    PRO
       2018-01-17 19:02:19 +08:00
    cuebyte
        14
    cuebyte  
       2018-01-17 19:05:18 +08:00
    又多了一个中文项目
    lotmany
        15
    lotmany  
       2018-01-17 19:24:37 +08:00

    这换行,不能忍啊不能忍... 火把呢?
    SeanDragon
        16
    SeanDragon  
    OP
       2018-01-17 19:30:46 +08:00
    @sunsulei #15 哈哈 我个人喜欢这种风格,不过介于该项目已经开源,我会尽快的使用阿里的代码规范手册将所有代码过一篇。 谢谢前辈指出
    K1W1
        17
    K1W1  
       2018-01-17 19:31:09 +08:00
    东西不错,不过我还是喜欢用 hutool,你可以参考一下,很大很全
    https://github.com/looly/hutool
    lotmany
        18
    lotmany  
       2018-01-17 19:36:18 +08:00
    @SeanDragon #16 #16 啥前辈啊. 谁写这个谁前辈. 你引的 gson 包的路径还是 org.google 的? 现在都是 com.google 的了吧..
    SeanDragon
        19
    SeanDragon  
    OP
       2018-01-17 19:36:59 +08:00
    @K1W1 #17 前辈,您好。我大致看了一下,hutool 的内容非常好,但是他对 web、jdbc 和日志框架等方面也进行了封装。
    这一点可能是我们两个项目不同的地方,protools 更轻量化和简约。最后谢谢前辈推荐的项目,我会研究学习。
    SeanDragon
        20
    SeanDragon  
    OP
       2018-0-17 19:38:56 +08:00
    @sunsulei #18 我改写了 gson,所以用的是私包,但是私人仓库里面有。到时候我会将私包和 protools 提交至中央仓库。

    中央仓库的时候可能要等到找到工作。望谅解。
    snakejia
        21
    snakejia  
       2018-01-17 20:28:28 +08:00 via iPhone
    收藏了
    yanjinbin
        22
    yanjinbin  
       2018-01-17 22:06:05 +08:00
    可以踩吗 是没学过 Java 吗 ? 整这个破玩意 干啥? 有空好好学学 JDK guava 不好吗?
    imNull
        23
    imNull  
       2018-01-17 22:08:19 +08:00 via Android
    @SeanDragon 杭州考虑么
    SeanDragon
        24
    SeanDragon  
    OP
       2018-01-17 22:16:23 +08:00
    @yanjinbin #22 这个仅仅是对 J2SE 中我个人认为比较常用的工具的一个汇总,方便开发使用,没有别的意思。前辈如果要迁怒于学术不精,晚辈不才,请前辈拿出您学习精湛的项目让晚辈研究学习,谢谢。
    SeanDragon
        25
    SeanDragon  
    OP
       2018-01-17 22:18:08 +08:00
    @imNull #23 抱歉,最近只考虑北京,其他区域不考虑。
    yanjinbin
        26
    yanjinbin  
       2018-01-17 22:53:15 +08:00
    private StrConst() {
    throw new UnsupportedOperationException("我是工具类,别初始化我。。。");
    }

    抛异常 ?



    public static final Charset DEFAULT_CHARSET

    取名问题 ? 我知道你默认的是啥?

    https://github.com/SeanDragon/protools/blob/master/common/src/main/java/pro/tools/data/decimal/Decimal.java

    代码 规范 多余的行


    getDivGetInteger(Object object) {}

    名字这么取???

    用 Object ?合适吗?
    SeanDragon
        28
    SeanDragon  
    OP
       2018-01-17 23:02:32 +08:00   1
    @yanjinbin #26 感谢提出的问题,关于代码细节您的建议可以提交 issues,也多谢您的建议。

    1 初始化,抛出异常,我个人认为没问题。工具类都是静态调用,需要实例化对象的我没有用构造器内抛出异常。
    2 这里的默认编码方式,我自认为应拥抱 UTF-8,所以在命名上欠妥,如果您有好的想法,可以提交 pr。
    3 代码规范这方面,我在该贴的 16 楼提到了,我会抽出一些时间来按照阿里的规范手册来整理代码。但是最近忙于找工作,速度没那么尽人意。
    4 命名方式,由于该项目早期也是在公司私库中的,难免有一些方法是因为项目需要,临时添加的,在命名有欠妥,这个还需要优化。

    还是谢谢你的建议,我也建议您对代码细节更好的诠释可以提 issues 或者提交 pr。
    yanjinbin
        29
    yanjinbin  
       2018-01-17 23:13:32 +08:00
    头一次见到 私有化构造器 还抛异常的


    麻烦看看 JDK 源码
    再让别人 star 好吗?
    xingda920813
        31
    xingda920813  
       2018-01-17 23:17:54 +08:00   3
    @yanjinbin

    这个地方 JDK 源码里面, java.util.Objects 就是这么做的. 用于防止实例化 (包括反射的情况).

    public final class Objects {
    private Objects() {
    throw new AssertionError("No java.util.Objects instances for you!");
    }
    }
    yanjinbin
        32
    yanjinbin  
       2018-01-17 23:19:33 +08:00
    既然你熟练掌握队列 ...

    行啊 给你 2 小时时间 告诉我 线程的唤醒方式

    队列的实现原理


    https://seandragon.github.io/

    告诉我下 ConcurrentSkipListMap

    或者难度低点 就 JDK8 的 ConcurrentHashMap
    SeanDragon
        33
    SeanDragon  
    OP
       2018-01-17 23:35:00 +08:00   2
    @yanjinbin #32 今天晚上看见您说这么多,我看到了我应该学习的地方,我也表达了我的不满。
    我在介绍中写的很清楚,这是一个历时两年开发出来的项目,我并没有说该项目有多么的厉害,还请前辈不要紧抓不放。
    我也在成长,这个项目也在成长,项目中有很多缺陷不足,我也相信在你我乃至更多的愿意为开源项目做贡献的人会使这个项目越来越好。
    前辈,我先睡了,谢谢你的建议,看得出来你指出问题也是希望这个项目更好,期待你的 issues 和 pr。
    SeanDragon
        34
    SeanDragon  
    OP
       2018-01-17 23:35:49 +08:00
    @xingda920813 #31 谢谢 V 友
    zjp
        35
    zjp  
       2018-01-18 00:38:50 +08:00 via Android   2
    有些看不下去。挑刺都挑到简历去了,这又不是求职贴

    我如果有楼主一半谦逊就好了(_`)
    zhix
        36
    zhix  
       2018-01-18 01:18:54 +08:00   1
    认真地看完了 commons 和 http 中的代码结构和风格,想看一下楼主是怎么对方法进行单元测试的,结果发现 test 包下只有一个 package-info.java。

    我认为楼主的出发点是好的,对常用代码进行封装以简化开发。但单层封装并没有使库的抽象程度提高,对于 API 的调用者来说只不过从学习标准库的调用方式变成了学习楼主提供的调用方式,而对于实际问题来说,使用 protocols 之前问题模型是什么样,使用之后还是什么样。

    其次是毫无“单元测试代码”,也就是说没有任何代码能够证明楼主提供的封装库的可靠性,简单地归纳常用代码的同时也引入了新的操作,中间每一步都有可能出现问题,尤其是频繁使用的公共库,抛开知名度不说,没有单元测试的支持让我很难在众多公共库中选择楼主的 protocols。楼主可以阅读一下 OkHttp、Netty、Guava 的单元测试代码,或者了解一下 JUnit 和 Mockito 的使用。

    一点建议,供楼主参考。
    SeanDragon
        37
    SeanDragon  
    OP
       2018-01-18 05:35:20 +08:00 via Android
    您好,前辈。就单元测试这一点,我原来是有大量测试文件的,您如果翻看 git 的历史便知,我昨天下午的时候全部删除了,因为这个项目已经经过两年检测,我想的是留着测试文件夹给大家做自己的测试。
    dizhang1109
        38
    dizhang1109  
       2018-01-18 05:43:40 +08:00   1
    @zhix 同意楼上的观点。Github 上任何一个优秀的库都自带单元测试。没有单元测试的库经不起检验。
    SeanDragon
        39
    SeanDragon  
    OP
       2018-01-18 08:33:26 +08:00 via Android
    @dizhang1109 @zhix 谢谢两位前辈建议,我会将整体系统性的单元测试加上,已列入 future。
    ihuotui
        40
    ihuotui  
       2018-01-18 08:49:51 +08:00 via iPhone
    大家吐槽那么多,证明大家对代码质量高,从技术出发,并不是人身攻击,希望传播知识时不会误导其他人。
    junbaor
        41
    junbaor  
       2018-01-18 09:09:39 +08:00 via iPhone
    自己学习可以,项目里还是好好用 apache guava 吧。
    junbaor
        42
    junbaor  
       2018-01-18 09:12:56 +08:00 via iPhone
    顶一下楼主,上面那句没有恶意。
    vance
        43
    vance  
       2018-01-18 09:16:12 +08:00
    简单看了下,发现槽点很多,看下 Guava 怎么实现的吧
    micean
        44
    micean  
       2018-01-18 09:31:05 +08:00
    看了下 https://github.com/SeanDragon/protools/blob/master/common/src/main/java/pro/tools/data/text/ToolStr.java

    toCamelCase 要完成 2 次遍历,join 参数是数组而不是不定参……
    footman265
        45
    footman265  
       2018-01-18 14:25:11 +08:00
    很多建议都很有用啊,楼主可以迭代吸收,这已经达到了把项目发出来的目的了
    gmywq0392
        46
    gmywq0392  
       2018-01-18 15:40:32 +08:00
    @yanjinbin 印象中 effective java 有这一则的,避免类被不必要的构造。工具类正是该使用场景吧。有些源码的 utils 里也有这么写法的。
    gowk
        47
    gowk  
       2018-01-18 23:03:40 +08:00 via Android
    楼主从善如流的态度值得学习
    lihongjie0209
        48
    lihongjie0209  
       2018-01-19 00:31:01 +08:00
    楼主心态真好, 值得学习
    SeanDragon
        49
    SeanDragon  
    OP
       2018-01-19 14:48:33 +08:00 via Android   1
    抱歉各位前辈,我这么长时间没回复。
    原因就是这两天找工作,再加上电脑主板坏了。

    大家给的建议我十分认可,这个帖子和 protools 这个项目产生的影响超出了我当时评估的程度。

    我十分感谢诸位前辈提出的建议,我一定会吸取,一定会让这个项目更好,不过我也是有私心的,我想年前暂时休息下,给家人多留些时间。

    所有的回复我都查看并仔细研读了,世界真美好,有广大热心的 v 友陪我一起度过。
    RisingV
        50
    RisingV  
       2018-03-02 14:29:35 +08:00
    这样的项目真的不 make sense
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3433 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 10:24 PVG 18:24 LAX 03:24 JFK 06:24
    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