• 请不要在回答技术问题时复制粘贴 AI 生成的内容
liuxin5959
V2EX  ›  程序员

常年写 JS,怎样适应 Java ?

  •  
  •   liuxin5959 · Apr 6, 2018 · 9819 views
    This topic created in 3133 days ago, the information mentioned may be changed or developed.

    写了几天 Java,发现处理个 JSON 都好麻烦,以前写 JS 完全没过这事,大家是怎样转变过来这种思维的呢?

    Supplement 1  ·  Apr 6, 2018
    才写不到一周,以前用 Node.js 写后台,现在换 Java,发现要学 Spring + Spring MVC + Mybatis + Maven 这一堆东西,心累。。。
    95 replies  •  2018-04-08 20:56:41 +08:00
    congeec
    congeec
    Apr 6, 2018 via iPhone
    1
    你才写了几天
    accfcx
    accfcx
    Apr 6, 2018 via Android
    2
    从 c 到 Java
    lihongjie0209
    lihongjie0209
    Apr 6, 2018
    3
    HashMap<String,Object> result =
    new ObjectMapper().readValue(JSON_SOURCE, HashMap.class);


    随便在网上找的, 哪里麻烦了
    noe132
    noe132
    Apr 6, 2018 via Android
    4
    常年写 js,什么时候 js 能像 java 一样静态类型
    murmur
    murmur
    Apr 6, 2018
    5
    你需要一个 idea
    notreami
    notreami
    Apr 6, 2018❤️2
    6
    别用 js 的思维套 java,。
    fastjson、jackson、gson。随便一个库,就能解决你纠结的问题。
    lhx2008
    lhx2008
    Apr 6, 2018 via Android❤️4
    7
    以长比短有什么办法?
    常年写 java,转到 js,怎么写多线程?大家是怎么转变思维的呢。
    ray1888
    ray1888
    Apr 6, 2018 via Android❤️1
    8
    @noe132 试一下 ts ?虽然我没用过
    notreami
    notreami
    Apr 6, 2018
    9
    @lihongjie0209 这个有种强行答题的感觉,ObjectMapper 是哪里来的?为什么要转成 Map,而不是直接对象?
    lihongjie0209
    lihongjie0209
    Apr 6, 2018
    10
    @notreami https://stackoverflow.com/questions/443499/convert-json-to-map 随手复制的, 具体自己看, 只是想说明这种问题根本不存在
    learnshare
    learnshare
    Apr 6, 2018
    11
    写 Node.js
    xiandao7997
    xiandao7997
    Apr 6, 2018 via iPhone
    12
    @noe132 typescript 还行~
    lxy
    lxy
    Apr 6, 2018❤️1
    13
    是的,超麻烦,如果要将 Json 完全解析成一个对象(有明确的类型,如 String、Integer、List 之类,而不是 Object ),则需要定义一个与 Json 结构相同的 class。3 楼那种是不完全解析。我写了半年 Java 的确很憋屈,Python 就自由得多。
    grantonzhuang
    grantonzhuang
    Apr 6, 2018 via Android
    14
    @notreami 然而 js 里面对象就是个 map。。。
    param
    param
    Apr 6, 2018 via Android
    15
    是超麻烦没错。
    pandago
    pandago
    Apr 6, 2018 via iPhone
    16
    多写就习惯了
    honeycomb
    honeycomb
    Apr 6, 2018 via Android❤️1
    17
    @notreami 习惯可以不同,在 Java 里要做 json 反序列化第一个想到的肯定是 Jackson,gson 那些库。强类型的语言多少会有这种麻烦。
    IvanLi127
    IvanLi127
    Apr 6, 2018 via Android
    18
    如果不是必须要 java,那么 typescript 了解一下?
    TakWolf
    TakWolf
    Apr 6, 2018❤️1
    19
    常年写 Java,求教怎样适应 JS ?对象里面有啥都不知道,点也点不出来(滑稽)


    根本原因是静态语言编程思维和动态语言编程思维的差别
    0x4b0082
    0x4b0082
    Apr 6, 2018
    20
    别适应了 我情况和你差不多...
    一边骂 java 一边哭着写。一种被猛男操哭的感觉
    最近上手 ts 感觉非常良好 js 代码一下子就安全舒服多了
    Cbdy
    Cbdy
    Apr 6, 2018 via Android
    21
    @noe132 ts 了解一下
    rb6221
    rb6221
    Apr 6, 2018
    22
    不要适应,就当零基础的去学
    差别太大没法类比的
    lihongjie0209
    lihongjie0209
    Apr 6, 2018❤️1
    23
    喜欢直接用动态语言 Map 直接处理 Json 的, 不知道你们如何对下面的 Json 做校验呢(例子来自: http://json.org/example.html)

    如果直接用 Map, 请问这么写你们不胆战心惊吗: Json["web-app"]["servlet"]["servlet-name"]



    {"web-app": {
    "servlet": [
    {
    "servlet-name": "cofaxCDS",
    "servlet-class": "org.cofax.cds.CDSServlet",
    "init-param": {
    "configGlossary:installationAt": "Philadelphia, PA",
    "configGlossary:adminEmail": "[email protected]",
    "configGlossary:poweredBy": "Cofax",
    "configGlossary:poweredByIcon": "/images/cofax.gif",
    "configGlossary:staticPath": "/content/static",
    "templateProcessorClass": "org.cofax.WysiwygTemplate",
    "templateLoaderClass": "org.cofax.FilesTemplateLoader",
    "templatePath": "templates",
    "templateOverridePath": "",
    "defaultListTemplate": "listTemplate.htm",
    "defaultFileTemplate": "articleTemplate.htm",
    "useJSP": false,
    "jspListTemplate": "listTemplate.jsp",
    "jspFileTemplate": "articleTemplate.jsp",
    "cachePackageTagsTrack": 200,
    "cachePackageTagsStore": 200,
    "cachePackageTagsRefresh": 60,
    "cacheTemplatesTrack": 100,
    "cacheTemplatesStore": 50,
    "cacheTemplatesRefresh": 15,
    "cachePagesTrack": 200,
    "cachePagesStore": 100,
    "cachePagesRefresh": 10,
    "cachePagesDirtyRead": 10,
    "searchEngineListTemplate": "forSearchEnginesList.htm",
    "searchEngineFileTemplate": "forSearchEngines.htm",
    "searchEngineRobotsDb": "WEB-INF/robots.db",
    "useDataStore": true,
    "dataStoreClass": "org.cofax.SqlDataStore",
    "redirectionClass": "org.cofax.SqlRedirection",
    "dataStoreName": "cofax",
    "dataStoreDriver": "com.microsoft.jdbc.sqlserver.SQLServerDriver",
    "dataStoreUrl": "jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon",
    "dataStoreUser": "sa",
    "dataStorePassword": "dataStoreTestQuery",
    "dataStoreTestQuery": "SET NOCOUNT ON;select test='test';",
    "dataStoreLogFile": "/usr/local/tomcat/logs/datastore.log",
    "dataStoreInitConns": 10,
    "dataStoreMaxConns": 100,
    "dataStoreConnUsageLimit": 100,
    "dataStoreLogLevel": "debug",
    "maxUrlLength": 500}},
    {
    "servlet-name": "cofaxEmail",
    "servlet-class": "org.cofax.cds.EmailServlet",
    "init-param": {
    "mailHost": "mail1",
    "mailHostOverride": "mail2"}},
    {
    "servlet-name": "cofaxAdmin",
    "servlet-class": "org.cofax.cds.AdminServlet"},

    {
    "servlet-name": "fileServlet",
    "servlet-class": "org.cofax.cds.FileServlet"},
    {
    "servlet-name": "cofaxTools",
    "servlet-class": "org.cofax.cms.CofaxToolsServlet",
    "init-param": {
    "templatePath": "toolstemplates/",
    "log": 1,
    "logLocation": "/usr/local/tomcat/logs/CofaxTools.log",
    "logMaxSize": "",
    "dataLog": 1,
    "dataLogLocation": "/usr/local/tomcat/logs/dataLog.log",
    "dataLogMaxSize": "",
    "removePageCache": "/content/admin/remove?cache=pages&id=",
    "removeTemplateCache": "/content/admin/remove?cache=templates&id=",
    "fileTransferFolder": "/usr/local/tomcat/webapps/content/fileTransferFolder",
    "lookInContext": 1,
    "adminGroupID": 4,
    "betaServer": true}}],
    "servlet-mapping": {
    "cofaxCDS": "/",
    "cofaxEmail": "/cofaxutil/aemail/*",
    "cofaxAdmin": "/admin/*",
    "fileServlet": "/static/*",
    "cofaxTools": "/tools/*"},

    "taglib": {
    "taglib-uri": "cofax.tld",
    "taglib-location": "/WEB-INF/tlds/cofax.tld"}}}
    orangeade
    orangeade
    Apr 6, 2018 via Android
    24
    @lihongjie0209
    python:
    dict.get('web-app', {}).get('xxxx', None)
    一个默认值的事
    orangeade
    orangeade
    Apr 6, 2018 via Android
    25
    不想每次加默认值也有 default dict 这种内置数据结构
    lihongjie0209
    lihongjie0209
    Apr 6, 2018
    26
    @orangeade #24 把这个用 Python 写一下 Json["web-app"]["servlet"]["servlet-name"]
    v2dead
    v2dead
    Apr 6, 2018
    27
    @lihongjie0209 你自己不都写出来了么?没错,python 字典也可以这么使用。就 Json["web-app"]["servlet"]["servlet-name"]就可以了。
    jtsai
    jtsai
    Apr 6, 2018❤️1
    28
    @lihongjie0209

    #3 JSON.parse() 哪里不麻烦

    首先要适应 Java 就要先承认 Java 是极其笨重和繁琐的语言, 然后自我催眠, 淡定 Java 的工资很高 淡定 Java 的工资很高 淡定 Java 的工资很高 ...
    zjsxwc
    zjsxwc
    Apr 6, 2018
    29
    我从 java 转 php 等脚本语言后后再也不想写 java 了,太懒不想写
    v2dead
    v2dead
    Apr 6, 2018
    30
    对了你说校验或者胆颤心惊的问题么?容易出错的代码块为什么不加入异常捕获呢?你可以说我懒,或者效率问题,但是我都用这类脚本来实现业务了,这个效率是我第一优先考虑的问题么?
    lihongjie0209
    lihongjie0209
    Apr 6, 2018
    31
    @v2dead #27 如果其中一个是 None 呢? 我会 Python
    lihongjie0209
    lihongjie0209
    Apr 6, 2018
    32
    @v2dead #30 假如有 10 个字段, 一个是 None, 你 Try Cache 之后怎么处理, 全部放弃还是保留剩下的 9 个, 如果保留, 怎么实现?
    lihongjie0209
    lihongjie0209
    Apr 6, 2018
    33
    @jtsai #28 一切都是 tradeoff, 写起来麻烦一点带来的是编译期安全, 写起来爽的带来的是运行期异常
    lihongjie0209
    lihongjie0209
    Apr 6, 2018
    34
    @v2dead #30 效率从来不是首先考虑的问题, 代码的健壮性才是
    johnniang
    johnniang
    Apr 6, 2018 via Android
    35
    都在拿着其他语言的长处和 Java 的短处比,有意思么
    lihongjie0209
    lihongjie0209
    Apr 6, 2018
    36
    @johnniang #35 也是好事情, 其他语言的长处说明解决了一些痛点, Java 只要跟的上, 这些东西迟早内置到 JDK 中
    shenjo
    shenjo
    Apr 6, 2018
    37
    @lihongjie0209 JS 里的话 lodash get 了解一下?
    const obj = {
    'web-app':{
    'servlet':{
    'servletName':'realName'
    }
    }

    }
    _.get(obj,'web-app.servlet.servletName') // realName
    _.get(obj,'web-app.unknown.servletName') // undefined
    xiandao7997
    xiandao7997
    Apr 6, 2018 via iPhone
    38
    好奇用 java 的项目为啥不转到 kotlin 呢,是因为要额外的学习成本 人难招 还是各个框架的兼容性还不够?
    v2dead
    v2dead
    Apr 6, 2018
    39
    @lihongjie0209 这么钻牛角尖就没意思了,怎么处理是业务的问题。不是需要怎么处理就怎么处理么?你会 Python 你自己不知道怎么保留 9 个么?要保留 9 个就保留 9 个呗。你这问题是在面试我么?
    lihongjie0209
    lihongjie0209
    Apr 6, 2018
    40
    @shenjo #37 这个不错, 假设有这样的代码 100 行, 如果我改变 Json 对象任意一个根节点的名称, 你需要修改多少行代码? 需要写多少单元测试才能确保不出错
    lihongjie0209
    lihongjie0209
    Apr 6, 2018
    41
    @v2dead #39 你把代码写出来就知道为什么不能这么做了
    lihongjie0209
    lihongjie0209
    Apr 6, 2018❤️1
    42
    直接使用 Map 的问题不在于解析,异常处理, 而在于没有封装, 任意一个改动都会导致大量的代码修改
    yaoliyc
    yaoliyc
    Apr 6, 2018 via iPhone
    43
    @lxy 自由不是没有代价的,java 通过类将数据结构描述清楚集中在一起,js 之类键值对基本分散在各处,各有利弊。
    starmoon1994
    starmoon1994
    Apr 6, 2018
    44
    是 maven 不好用?
    还是 Java 提供的基础类库少了?
    kennylam777
    kennylam777
    Apr 6, 2018❤️1
    45
    @lxy 如果你用的 API 都有良好的 documentation, 或者是 Swagger 那種按 API 定義自動生成的, 你應該會覺得把 json 結構寫成 class 會舒服很多

    如果寫後台都是隨心所欲的在改結構又不給 doc, 那我才擔心這種設計合作起來會異常麻煩

    最怕那種會直接返回不同結構的 API, 奇怪的狀況要動用 json parser 處理而不是 status code, 根本是浪費大家時間
    deadEgg
    deadEgg
    Apr 6, 2018❤️1
    46
    java oo 的东西顺手起来会觉着爽到
    bbzt
    bbzt
    Apr 6, 2018
    47
    @lihongjie0209 #23

    请问这么写你不胆战心惊吗: Json.webApp.servlet.servletName
    lihongjie0209
    lihongjie0209
    Apr 6, 2018
    48
    @bbzt 我会封装成 Json.getservletName(), 随便怎么改都可以
    bbzt
    bbzt
    Apr 6, 2018
    49
    @lihongjie0209 #48

    在新版 js 里也可以用 class 方式的写法,抓着十年前 es5 这种老版 js 问题,没意思
    kennylam777
    kennylam777
    Apr 6, 2018
    50
    拿 23 樓那種超長的例子來說, 如果只是有一天 web-app.servlet.servlet-name 改成了 web-app.servlet.servlet-id

    如果有結構封裝, 要改代碼的話, 就把封裝 json 結構的 class 找出來改掉
    class servlet{
    String servlet-name;
    }

    直接用 IDE 的 refactor 改成新的 field 名字, 這樣引到用這 field 的地方都會自動改掉, 引用 1 次還是 100 次都沒差
    class servlet{
    String servlet-id;
    }

    沒有封裝的話, 如果用 Json["web-app"]["servlet"]["servlet-name"] 的, 嗯, 你們就慢慢手動的 search,再看看是否相關, 然後才 replace......這種 code 你自己用得開心就好, 不要留下來了
    lihongjie0209
    lihongjie0209
    Apr 6, 2018
    51
    @bbzt #49 浏览器支持率多少?
    bbzt
    bbzt
    Apr 6, 2018
    52
    @lihongjie0209 #51

    浏览器端 babel 编译新版 js 代码到 es5 就行。
    服务器端 nodejs 都支持的
    lihongjie0209
    lihongjie0209
    Apr 6, 2018
    53
    @xiandao7997 #38 主要原因是没有必须迁移的原因, 我没有用过 kotlin, 但是迁移造成的影响是可知的
    1. BUG: 新的语言和框架必然有 BUG, 也就是稳定性没有经过时间的考验, 除了问题谁负责解决?
    2. 人力成本: 开发者必然需要投入时间学习, 甚至需要经过一两个项目才能完全迁移到新的语言
    3. 历史包袱: 已有的基础设施是否可以重用, 不可重用的话也要做迁移, 迁移之后还要测试维护.
    4. 开发者个人体验: 对于项目组来说, 不关心.
    lihongjie0209
    lihongjie0209
    Apr 6, 2018
    54
    @bbzt #52 既然有 Babel, 那么也要配一个 webpack 吧, 然后 npm 安装上百个依赖, 最后我可以开心的用 class 了
    bbzt
    bbzt
    Apr 6, 2018
    55
    @lihongjie0209 #54

    然而这些事情,IDE 都自动帮你干了,你只需写代码就行
    lihongjie0209
    lihongjie0209
    Apr 6, 2018
    56
    @bbzt #55 那还要 webpack 配置工程师干嘛
    orangeade
    orangeade
    Apr 6, 2018
    57
    @kennylam777 #45
    @lihongjie0209 #42
    这又不是 Java 的专利,json 封装为对象方式那么多

    https://stackoverflow.com/questions/6578986/how-to-convert-json-data-into-a-python-object
    l30n
    l30n
    Apr 6, 2018 via Android
    58
    Java 刚转前端,累啊
    lihongjie0209
    lihongjie0209
    Apr 6, 2018
    59
    @orangeade #57 该个字段名称试试
    kennylam777
    kennylam777
    Apr 6, 2018
    60
    @orangeade
    對我來說, 只要有封裝的都是可行的設計方法, 我還有用 Golang 呢, 近來在練 Kotlin
    v2dead
    v2dead
    Apr 6, 2018❤️2
    61
    是否有封装这种问题的出现不应该取决于对 json 这一类外来数据的处理方式上面,而是来自良好的编码习惯。像这种看起来像是配置类的 json 数据,进行配置的时候必然是带封装的,因为可能要考虑配置变更或者是数据来源的不同,但怎么处理 json 是另外的问题。不是说用 map 处理我就不能做封装了,对待不同的行为的时候做法也是完全不一样的。
    比方这个 json 数据来源现在是来自外部消息处理,外部消息是不可靠而且来源多样的,根本无法去做各类预设,而且也不会扩散到其他的业务模块,这时候提前设定结构就是很蠢的设定。数据源怎么解析,和是否封装良好没有直接关系。
    qinxi
    qinxi
    Apr 6, 2018
    62
    以前用 java 写后台.现在用 node 要学 ES6 7 ts webpack express
    lihongjie0209
    lihongjie0209
    Apr 6, 2018
    63
    @v2dead #61
    是否有封装这种问题的出现不应该取决于对 json 这一类外来数据的处理方式上面,而是来自良好的编码习惯。
    反驳: 封装就是取决与如何对 Json 建模, 如果用 Map, 那么你就把 Json 的内部结构完全暴露给客户端. 良好的编码习惯就是 information hiding.

    数据源怎么解析,和是否封装良好没有直接关系。
    反驳: 这点我同意, 数据源的解析应该封装起来, 不被客户端知道, 问题是你解析完成之后你给客户端返回什么? Map? 和不封装没什么区别. 对象? 那么你就要预先定义好接口, 那么就和你说的第二段话矛盾了.
    ipwx
    ipwx
    Apr 6, 2018
    64
    @lihongjie0209 我觉得 @v2dead 说的很对。你举的这个例子,这么冗长复杂的配置文件,在别的语言里面是不受待见的。像 Python、JS 处理 JSON 对象,一般只会出现在 API 接口处,然后立刻就处理掉了,没多少机会传播到别的地方的。所以也就没有什么不容易重构的坑了。
    lihongjie0209
    lihongjie0209
    Apr 6, 2018
    65
    @qinxi #62 这就是我不喜欢前端的原因, 一个语言社区应该做的事情让每一个开发者都做一遍, 浪费多少时间
    ipwx
    ipwx
    Apr 6, 2018
    66
    @lihongjie0209 另外你太小看 IDE 了。Webstorm 完全可以重构代码里面看得到结构的对象( return {a: xxx, b: xxx} 这种),用起来和 Java 定义过的结构没有本质区别。
    lihongjie0209
    lihongjie0209
    Apr 6, 2018
    67
    @ipwx #64 首先, 这只是一个从 Json 官网拿下来的例子. 其次, 这种大对象我做的项目中随便都能找到, 应该每个项目都有. 最后你提到的处理那应该是会给调用者返回一个 Map 或者对象, 请问具体是怎么处理的
    lihongjie0209
    lihongjie0209
    Apr 6, 2018
    68
    @ipwx #66 动态语言的重构从来都不简单甚至是信不过的, 更不要说涉及到字符串了
    kennylam777
    kennylam777
    Apr 6, 2018
    69
    @v2dead 如果是外部不確定的來源, 做一個非完整的 sturct 就好, 只為需要的(needed)及已知的(known)的地方寫 fields, 像 jackson 般就是可以把沒定義的 fields 全放在 map 之中, 兩者兼顧到

    如果整天接到的 json 都是亂來的, 也就認了
    v2dead
    v2dead
    Apr 6, 2018
    70
    可能我们的封装不是一个层次的,就拿配置说事,我的意思是外部请求配置必然有明确的接口,确定的结构。而数据源解析只是这个配置下的一小部分,如果封装就是指对 json 建模这种粗浅的事情了,我问你现在配置来源变成 xml 了呢?变成 properties 了呢?你的建模又如何处理?我个人喜好用 map 去处理原始 json,并不意味着我要暴漏细节给我的用户。
    jinsongzhao
    jinsongzhao
    Apr 6, 2018 via Android
    71
    @raphaelsoul 由衷的笑了。
    jinsongzhao
    jinsongzhao
    Apr 6, 2018 via Android❤️1
    72
    从 C++到 C#,再 JAVA 和 JS,写久了 JAVA 代码,体会是,代码会越来越精简,预组装越来越多,初始化速度越来越慢,总之猛男也有柔情。JS 则像个软妹子,时不时透出灵动,琢磨不透的美,总还是有读得懂软妹子心的柔情猛男呵!
    hareandlion
    hareandlion
    Apr 6, 2018 via iPhone
    73
    写 js 不用 ts 吗
    liuxin5959
    liuxin5959
    OP
    Apr 6, 2018
    74
    @hareandlion TS 做不到像真正的强类型语言那样的束缚,再说由于架构问题只能用 Java。
    night98
    night98
    Apr 6, 2018
    75
    json to object 插件了解一下。
    SpringMVC 可以自动将 JSON 转 Object,大多数时候不需要手动转啊
    ostholz
    ostholz
    Apr 6, 2018
    76
    直接上 Kotlin
    mandy0119
    mandy0119
    Apr 6, 2018
    77
    记得加分号
    wee911
    wee911
    Apr 6, 2018
    78
    原因是你没理解各种数据结构,json 在 js 里当然很简单,其他任何语言都要用库转
    wangxiaoaer
    wangxiaoaer
    Apr 6, 2018
    79
    太矫情了,你试没试过 go 这种 xx 一样语言,解析 json 你想死。
    fiht
    fiht
    Apr 6, 2018
    80
    当年在 vim 下写了半年 C,之后写什么语言都觉得这语言太特么的好用了。
    由俭入奢易 由奢入俭难
    jjx
    jjx
    Apr 6, 2018
    81
    vertx 然后用 js

    不过 jvm 上的多语言都有一个问题, 就是最后重心都会偏向 java, 同.net 重心偏向 c#一样, 导致其他语言的支持可能一开始能尽力,到最后只是过场或废弃

    从 vertx 的两个 blog, 一个用 babel 支持 es6, 一个用 ts 写 vertx 就可以看出来

    //https://vertx.io/blog/vert-x-es6-back-to-the-future/

    //https://vertx.io/blog/ecmascript-6-7-on-the-jvm-with-typescript-and-vert-x/
    morning
    morning
    Apr 6, 2018
    82
    至少超过 17 位的数字不用转了 233
    anubiskong
    anubiskong
    Apr 6, 2018
    83
    你用过 JS 还能忍受 JAVA ?真是个人才
    choulinlin
    choulinlin
    Apr 6, 2018 via Android
    84
    @zjsxwc 你搞了几年 java 小弟也是学校学了 java 然后自学 不知看了多少 java 书和网页 就因为还没毕业发现 java 工作机会多 工资高 不过第一份工作一进公司 试用期就转了 php 一开始还不愿意 看不起 php 还想转回 java
    直到后来单干了 才发现 php 的好

    什么赚钱就什么好 不是取决于技术 而是取决于客户和市场和业务
    hzw94
    hzw94
    Apr 6, 2018
    85
    我也转了 java 在搞,也是一个 json 转化都搞懵逼,只能看 java 同事都代码做
    hotsymbol
    hotsymbol
    Apr 6, 2018
    86
    那是你不会。C#能救你
    Delete
    Delete
    Apr 6, 2018
    87
    JSON (JavaScript Object Notation, JS 对象标记)
    murmur
    murmur
    Apr 6, 2018
    88
    @ipwx webstorm 的重构
    呵呵
    你信你用吧

    弱语言怎么作也做不过 java c#天生这种带符号表的
    rashawn
    rashawn
    Apr 7, 2018 via iPhone
    89
    @kennylam777 这个跟语言没啥关系吧 啥语言都能这么干啊
    wekw
    wekw
    Apr 7, 2018
    90
    思维转换是很难的,慢慢来吧
    cyspy
    cyspy
    Apr 7, 2018
    91
    主要是 js 可以在 JSON 的几种数据类型之间随便互转,这必然会带来坑,API 设计靠小心一点。静态强类型语言不能互转的,但是当 JSON 结构变化的时候只要改一下模型类就行了,js 要在整个代码里面找哪里用到,坑太大
    xrlin
    xrlin
    Apr 7, 2018
    92
    @murmur 用过 webstorm 写 js,但相比静态类型语言的支持还是太不傻瓜了,和装上插件的编辑器没多大区别。在重构、协作时就可以看出 ts 的用处了,希望 ts、assembly 能早日推广应用。
    zhantss
    zhantss
    Apr 7, 2018
    93
    写几天 TS 适应一下静态类型

    然后 JSON 处理的问题,因为 js 本来对 json 就比较友好,所以会有比较大的落差,处理上找个序列化框架就可以啦

    Maven 开始会用就行,看个 get started

    Spring 这算是事实基础了,没办法硬着头皮上吧,不过一般的项目我觉得吧,用的也不是特别深入,把原理和常用的配置注解看一下,写一段时间就熟能生巧了
    print1024
    print1024
    Apr 8, 2018
    94
    对于 JSON 可以使用 Jackson 或者 阿里的 fastjson
    zjsxwc
    zjsxwc
    Apr 8, 2018 via Android
    95
    @choulinlin

    一年多企业内部 Java 系统,后来带我的大神创业去他朋友公司写 php,于是我也一起去了,当时那个公司程序员都是 Java 转 php,我也是那时后入坑 symfony
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4248 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 168ms · UTC 01:07 · PVG 09:07 · LAX 17:07 · JFK 20:07
    ♥ Do have faith in what you're doing.