1.C#项目Java化注意事项
1.工具:C#to Java Converter
(1)不能转框架相关代码,比如C#使用SqlSugar框架所带的DAL层Lambda
(2)不会转换命名方式,比如C#代码基本首字母大写的驼峰命名,Java基本是首字母小写的驼峰命名
(3)单文件翻译,不会主动生成注解,不会主动生成Java框架;总之,只是翻译代码,所得结果可以复制粘贴减少部分工作量,具体得架构设计及框架引入得工作少不了。
2.比较符
C#比较操作可参考https://www.cnblogs.com/Aaxuan/p/9520883.html
Java有三种方式:==比较引用,equals比较值,compareTo比较对象
一般我们的代码比较的都是值的大小,不论值类型和引用类型C#基本使用==来比较。Java需改正过来,引用类型需使用equals,对象的比较要使用compareTo(比如Date对象比较)。
3.实体
C#不需要单独定义get和set,C#的属性定义本身就实现setter和getter。
Java需要在定义变量之后,定义get和set方法。
mybatis框架不允许变量带_,如果表的字段设计上有_需使用注解来映射。举个例子:
1 /** 2 * @Desc 实体类 3 * @Author generator 4 * @Date <2019年02月15日> 5 * @version 1.0 6 */ 7 @TableName("agent_goods") 8 public class TaAgentGoods extends BaseEntity{ 9 private static final long serialVersionUID = 1L; 10 11 /** 主键 */ 12 @TableId(type=IdType.AUTO) 13 private Integer id; 14 /** 运单号 */ 15 @TableField("OrderNo") 16 private String orderNo; 17 /** 代理单号 */ 18 @TableField("AgentOrderNo") 19 private String agentOrderNo; 20 /** 派送人 */ 21 @TableField("Col_008") 22 private String col008; 23 /** 派送人ID */ 24 @TableField("Col_009") 25 private String col009; 26 /** 取派类型 */ 27 @TableField("ActionType") 28 private Integer actionType; 29 30 public void setId(Integer id) { 31 this.id = id; 32 } 33 public Integer getId() { 34 return this.id; 35 } 36 public void setOrderNo(String orderNo) { 37 this.orderNo = orderNo; 38 } 39 public String getOrderNo() { 40 return this.orderNo; 41 } 42 public void setAgentOrderNo(String agentOrderNo) { 43 this.agentOrderNo = agentOrderNo; 44 } 45 public String getAgentOrderNo() { 46 return this.agentOrderNo; 47 } 48 public void setCol008(String col008) { 49 this.col008 = col008; 50 } 51 public String getCol008() { 52 return this.col008; 53 } 54 public void setCol009(String col009) { 55 this.col009 = col009; 56 } 57 public String getCol009() { 58 return this.col009; 59 } 60 public void setActionType(Integer actionType) { 61 this.actionType = actionType; 62 } 63 public Integer getActionType() { 64 return this.actionType; 65 } 66 67 @Override 68 public String toString() { 69 return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) 70 .append("id",getId()) 71 .append("orderNo",getOrderNo()) 72 .append("agentOrderNo",getAgentOrderNo()) 73 .append("col008",getCol008()) 74 .append("col009",getCol009()) 75 .append("actionType",getActionType()) 76 .toString(); 77 } 78 }
View Code
4.API入参
因为接口入参已经定义好了,并且之前的项目入参定义五花八门,导致Java代码需要额外的代码处理入参。
C#MVC项目,API入参默认不区分大小写,只要字符对应,不论大小写都可以对应。
Java默认严格遵守大小写规则,入参名和定义的方法参数无法一一对应,将无法接收到参数值。
不过都可以使用第三方来调整,C#可以使用Newtonsoft.json特性来规定入参规则,Java也可以使用fastJson的注解@JsonProperty来转换。
注意fastjson的Json.parseObject要按照正规的get/set定义才可以转换,get/set方法命名大小写需要严格。
1 package com.kye.ats.asm.model.Request; 2 3 import com.fasterxml.jackson.annotation.JsonProperty; 4 import com.kye.ats.asm.model.BaseRequest; 5 6 public class VoiceMsgReportNewRequest extends BaseRequest 7 { 8 /** 9 用户的请求ID Sn 唯一ID 10 11 */ 12 @JsonProperty("voiceId") 13 private String voiceId; 14 public final String getVoiceId() 15 { 16 return voiceId; 17 } 18 public final void setVoiceId(String value) 19 { 20 voiceId = value; 21 } 22 /** 23 被叫号码 24 25 */ 26 @JsonProperty("caller") 27 private String caller; 28 public final String getCaller() 29 { 30 return caller; 31 } 32 public final void setCaller(String value) 33 { 34 caller = value; 35 } 36 /** 37 强显号码 38 39 */ 40 @JsonProperty("callee") 41 private String callee; 42 public final String getCallee() 43 { 44 return callee; 45 } 46 public final void setCallee(String value) 47 { 48 callee = value; 49 } 50 /** 51 语音通知业务时用户反馈的按键值 52 53 */ 54 @JsonProperty("dtmf") 55 private String dtmf; 56 public final String getDtmf() 57 { 58 return dtmf; 59 } 60 public final void setDtmf(String value) 61 { 62 dtmf = value; 63 } 64 /** 65 通话时长(秒) 66 67 */ 68 @JsonProperty("holdTime") 69 private int holdTime; 70 public final int getHoldTime() 71 { 72 return holdTime; 73 } 74 public final void setHoldTime(int value) 75 { 76 holdTime = value; 77 } 78 /** 79 接听状态 80 81 */ 82 @JsonProperty("answerStatus") 83 private long answerStatus; 84 public final long getAnswerStatus() 85 { 86 return answerStatus; 87 } 88 public final void setAnswerStatus(long value) 89 { 90 answerStatus = value; 91 } 92 /** 93 通话开始时间 94 95 */ 96 @JsonProperty("startTime") 97 private java.util.Date startTime = new java.util.Date(0); 98 public final java.util.Date getStartTime() 99 { 100 return startTime; 101 } 102 public final void setStartTime(java.util.Date value) 103 { 104 startTime = value; 105 } 106 /** 107 通话结束时间 108 109 */ 110 @JsonProperty("endTime") 111 private java.util.Date endTime = new java.util.Date(0); 112 public final java.util.Date getEndTime() 113 { 114 return endTime; 115 } 116 public final void setEndTime(java.util.Date value) 117 { 118 endTime = value; 119 } 120 /** 121 归属地 122 123 */ 124 @JsonProperty("location") 125 private String location; 126 public final String getLocation() 127 { 128 return location; 129 } 130 public final void setLocation(String value) 131 { 132 location = value; 133 } 134 /** 135 呼叫失败错误码 136 137 */ 138 @JsonProperty("failCode") 139 private String failCode; 140 public final String getFailCode() 141 { 142 return failCode; 143 } 144 public final void setFailCode(String value) 145 { 146 failCode = value; 147 } 148 /** 149 呼叫失败原因 150 151 */ 152 @JsonProperty("failCause") 153 public String failCause; 154 public final String getFailCause() 155 { 156 return failCause; 157 } 158 public final void setFailCause(String value) 159 { 160 failCause = value; 161 } 162 /** 163 呼叫时间 164 165 */ 166 @JsonProperty("callTime") 167 private java.util.Date callTime = new java.util.Date(0); 168 public final java.util.Date getCallTime() 169 { 170 return callTime; 171 } 172 public final void setCallTime(java.util.Date value) 173 { 174 callTime = value; 175 } 176 /** 177 状态返回时间 178 179 */ 180 @JsonProperty("responseTime") 181 private java.util.Date responseTime = new java.util.Date(0); 182 public final java.util.Date getResponseTime() 183 { 184 return responseTime; 185 } 186 public final void setResponseTime(java.util.Date value) 187 { 188 responseTime = value; 189 } 190 }
View Code
5.new对象与注解
实体类在两个语言中都是一样的写法,即使用new来实力化对象。
Java目前一般引入注解来实现调用其他包的方法,这样有好处,你会发现同一个类调用其他类不能到处new对象了。
6.枚举
.Net枚举是值类型,Java枚举是类。Java需要实现.Net枚举值操作需要定义更多的方法来实现。
Java代码:
你会发现字段和枚举之间根本没什么关系,如果不是文字描述,谁知道这个字段可以用枚举来描述。
1 /** 是否特殊客户 0:否 1:是 */ 2 @TableField("Col_013") 3 private Integer col013; 4 5 public void setCol013(Integer col013) { 6 this.col013 = col013; 7 } 8 9 public Integer getCol013() { 10 return this.col013; 11 } 12 13 14 /// <summary> 15 /// 是否特殊客户 16 /// </summary> 17 public enum EnumSpecialCompany { 18 /// <summary> 19 /// 否 20 /// </summary> 21 No(0, "否"), 22 /// <summary> 23 /// 是 24 /// </summary> 25 Yes(1, "是"); 26 public int code; 27 public String name; 28 29 EnumSpecialCompany(int code, String name) { 30 this.code = code; 31 this.name = name; 32 } 33 34 public static String getValueByCode(Integer code) { 35 for (EnumSpecialCompany platformFree : EnumSpecialCompany.values()) { 36 if (code.equals(platformFree.getCode())) { 37 return platformFree.getName(); 38 } 39 } 40 return null; 41 } 42 43 public int getCode() { 44 return code; 45 } 46 47 public void setCode(int code) { 48 this.code = code; 49 } 50 51 public String getName() { 52 return name; 53 } 54 55 public void setName(String name) { 56 this.name = name; 57 } 58 }
View Code
C#代码:
一般的写法,有明显的关联痕迹。
1 /// <summary> 2 /// 是否特殊客户 3 /// </summary> 4 public enum EnumSpecialCompany 5 { 6 /// <summary> 7 /// 否 8 /// </summary> 9 [Description("")] 10 No = 0, 11 /// <summary> 12 /// 是 13 /// </summary> 14 [Description("是")] 15 Yes = 1, 16 17 } 18 19 /// <summary> 20 ///是否特殊客户 0:否 1:是 21 /// </summary> 22 public EnumSpecialCompany Col_013 { get; set; }
View Code
7.DateTime
.Net:2019/4/10 17:21:47
Java:Wed Apr 10 17:26:27 CST 2019
可以使用JSONField来格式化
1 @JSONField(name = "TrackDT",format = "yyyy-MM-dd HH:mm:ss") 2 private Date trackDT;
View Code
8.Redis
C#:使用的是StackExchange.Redis
Java:使用的是org.springframework.data.redis.core
需要注意的是Java Redis set方法,入参是Object,所以一定要注意入参的类型,Interger和String保存的Redis是不一样的。
1 public boolean set(String key, Object value) { 2 try { 3 redisTemplate.opsForValue().set(key, value); 4 return true; 5 } catch (Exception e) { 6 e.printStackTrace(); 7 return false; 8 } 9 10 }
View Code
9.Json反序列化
.Net的Newtonsoft.json DeserializeObject可以将json字符串转换为实体,并且不论实体是否是多层嵌套实体。
Java中的fastjson Json.parseObject能转换简单的json字符串,但是如果json字符串含多层嵌套,无法转换,要使用另一种方式来处理。
1 private Recordset GetRecordset(Map<String, Object> dic, String url) { 2 String res = OpenApi.request(url, dic); 3 if (StringUtils.isNotBlank(res)) { 4 ObjectMapper mapper = new ObjectMapper(); 5 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false); 6 Response<ResponseResult<RecordSetResponseModel>> responseModel = null; 7 try { 8 responseModel = mapper.readValue(res, new com.fasterxml.jackson.core.type.TypeReference<Response<ResponseResult<RecordSetResponseModel>>>() { 9 }); 10 } catch (IOException e) { 11 e.printStackTrace(); 12 } 13 if (responseModel == null || responseModel.isFail() || responseModel.getData() == null || responseModel.getData().getRows() == null) 14 return null; 15 16 List<RecordSetResponseModel> models = responseModel.getData().getRows(); 17 18 Collections.sort(models, new Comparator<RecordSetResponseModel>() { 19 @Override 20 public int compare(RecordSetResponseModel o1, RecordSetResponseModel o2) { 21 return o2.getCol_006() > o1.getCol_006() ? 1 : -1; 22 } 23 }); 24 25 if(models!=null && models.size()>0) 26 { 27 return RecordSetConverter.ToEntity(models.get(0)); 28 } 29 } 30 return null; 31 }
View Code
10.Lamda
C#:
var taskDriver = tasks.Where(t => t.Col_032 == Const.BringDevice_NO).Where(t => t.Col_028 > dtstart).Where(t => t.Col_040 == dtstart).Where(t => t.Sort > 0).FirstOrDefault();
Java:
1 TaTask taskDriver = tasks.stream().filter( 2 t -> Const.BringDevice_NO.equals(t.getCol032()) && t.getCol028().after(dtstart) && dtstart.equals(t.getCol040()) && t.getSort() > 0) 3 .findFirst().orElse(null);
View Code
转载于:https://www.cnblogs.com/wenthing/p/10675586.html
1.C#项目Java化注意事项相关推荐
- 「实战篇」开源项目docker化运维部署-后端java部署(七)
原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:「实战篇」开源项目docker化运维部署-后端java部署(七) 本节主要说说后端的部署需要注意的点,本身renren-fas ...
- SpringBoot项目Docker化并上传DockerHub的使用过程
. springboot项目 docker化 添加依赖 代码片段:<plugin><groupId>com.spotify</groupId><artifac ...
- 太恐怖了 两天搞定一个项目 Java Web MVC 网络商城教程+源代码
两天搞定一个项目 Java Web MVC 网络商城教程+源代码 最近自学做了一个网络商城将以下是代码和教程 环境搭建–数据库设计–页面设计-后台设计 本项目使用的jdk版本是 运行项目前需要先配置好 ...
- 开源项目在线化 中文繁简体转换/敏感词/拼音/分词/汉字相似度/markdown 目录
前言 以前在 github 上自己开源了一些项目.碍于技术与精力,大部分项目都是 java 实现的. 这对于非 java 开发者而言很不友好,对于不会编程的用户更加不友好. 为了让更多的人可以使用到这 ...
- SpringBoot使用assembly进行项目定制化打包
SpringBoot使用assembly进行项目定制化打包 一.项目配置 1.添加插件 (1)编辑项目的 pom.xml 文件,加入 assembly 打包插件: <build><p ...
- Android项目模板化
目录地址 首先了解模板的文件结构,先看一个自带的模板"Empty Activity",目录地址是plugins/android/lib/templates/,里面就有我们需要的模板 ...
- java 怎么向串口发送指令_idea ssm项目java程序使用十六进制rxtx包向串口发送指令的方法...
1.前提 idea ssm项目环境要配好,这里就不多赘述了,自己配好 2.下载配置rxtx包 官网下载:http://rxtx.qbang.org/wiki/index.php/Download 根据 ...
- 在IDEA中关于项目java版本问题
在IDEA中关于项目java版本问题 当出现错误如:java无效的源发行版11或IDEA Error:java:Compliation failed:internal java complier er ...
- 项目开发一些注意事项
项目开发一些注意事项 1.一些简单的方法可以让你的代码看起来更明了,如函数或者方法,尽量的写的小一些,如果太冗长,尝试抽出一块写成一个函数: 2.如果业务逻辑比较复杂,判断选项较多,可以把判断抽出来, ...
最新文章
- python爬虫小说代码示例-使用简单Python爬虫获取一个干净整洁的小说文件
- ScriptManager 帮助您实现 Web 应用程序的 AJAX 功能
- vue 组件以字符串插入_今日分享:vue3多层嵌套组件如何访问到最外层组件的数据?...
- 收不到Win10正式版预订通知?一个批处理搞定
- 怎么判断适合学java_如何知道自己是否适合学习java开发
- 北京林业大学c语言题库,2016年北京林业大学信息学院数据结构考研复试题库
- 一元多项式的表示和相加【数据结构】
- python3 asyncio 爬虫_python3 asyncio异步新浪微博爬虫WeiboSpider
- 最全的B端产品经理干货知识(3)
- 进阶必看的 RocketMQ ,就这篇了!
- 基于深度学习算法的NLP集成工具
- 实验六:流类库与I/O
- 深度学习系列(二)【人类语言处理--语音辨识】
- android 字体像素转换工具类_Android点9图机制及在聊天气泡中的应用
- qt 定义一个长度的数组_6.8 C++字符数组
- DB2的下载、图解安装、可能出现的问题(一篇解决)
- npm : command not found 问题
- python数列_Python斐波拉契数列
- 计算机信息数字化基础1测验题,20春-计算机信息技术-章建民-1-中国大学mooc-题库零氪...
- php.c drcom,成功 将校园客户端drcom搞进openwrt
热门文章
- 浅谈Kubernetes Service负载均衡实现机制
- Python类和对象的入门级讲解(简单粗暴)
- 求出所有这些四位数是素数的个数cnt,再把所有满足此条件的四位数依次存入数组b中,然后对数组b中的四位数按从小到大的顺序进行排序
- Netty的EventLoop
- 思维导图学Java编程思想
- Docker系列五~docker安装php-fpm
- RabbitMQ七种队列模式介绍与应用场景(通俗易懂)
- Java多线程编程系列-多线程基础
- 装载鸿蒙系统,华为3-4月份将正式推送鸿蒙系统 第三方装载量也将达到一个亿...
- 使用JsonConfig控制JSON lib序列化