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化注意事项相关推荐

  1. 「实战篇」开源项目docker化运维部署-后端java部署(七)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:「实战篇」开源项目docker化运维部署-后端java部署(七) 本节主要说说后端的部署需要注意的点,本身renren-fas ...

  2. SpringBoot项目Docker化并上传DockerHub的使用过程

    . springboot项目 docker化 添加依赖 代码片段:<plugin><groupId>com.spotify</groupId><artifac ...

  3. 太恐怖了 两天搞定一个项目 Java Web MVC 网络商城教程+源代码

    两天搞定一个项目 Java Web MVC 网络商城教程+源代码 最近自学做了一个网络商城将以下是代码和教程 环境搭建–数据库设计–页面设计-后台设计 本项目使用的jdk版本是 运行项目前需要先配置好 ...

  4. 开源项目在线化 中文繁简体转换/敏感词/拼音/分词/汉字相似度/markdown 目录

    前言 以前在 github 上自己开源了一些项目.碍于技术与精力,大部分项目都是 java 实现的. 这对于非 java 开发者而言很不友好,对于不会编程的用户更加不友好. 为了让更多的人可以使用到这 ...

  5. SpringBoot使用assembly进行项目定制化打包

    SpringBoot使用assembly进行项目定制化打包 一.项目配置 1.添加插件 (1)编辑项目的 pom.xml 文件,加入 assembly 打包插件: <build><p ...

  6. Android项目模板化

    目录地址 首先了解模板的文件结构,先看一个自带的模板"Empty Activity",目录地址是plugins/android/lib/templates/,里面就有我们需要的模板 ...

  7. java 怎么向串口发送指令_idea ssm项目java程序使用十六进制rxtx包向串口发送指令的方法...

    1.前提 idea ssm项目环境要配好,这里就不多赘述了,自己配好 2.下载配置rxtx包 官网下载:http://rxtx.qbang.org/wiki/index.php/Download 根据 ...

  8. 在IDEA中关于项目java版本问题

    在IDEA中关于项目java版本问题 当出现错误如:java无效的源发行版11或IDEA Error:java:Compliation failed:internal java complier er ...

  9. 项目开发一些注意事项

    项目开发一些注意事项 1.一些简单的方法可以让你的代码看起来更明了,如函数或者方法,尽量的写的小一些,如果太冗长,尝试抽出一块写成一个函数: 2.如果业务逻辑比较复杂,判断选项较多,可以把判断抽出来, ...

最新文章

  1. python爬虫小说代码示例-使用简单Python爬虫获取一个干净整洁的小说文件
  2. ScriptManager 帮助您实现 Web 应用程序的 AJAX 功能
  3. vue 组件以字符串插入_今日分享:vue3多层嵌套组件如何访问到最外层组件的数据?...
  4. 收不到Win10正式版预订通知?一个批处理搞定
  5. 怎么判断适合学java_如何知道自己是否适合学习java开发
  6. 北京林业大学c语言题库,2016年北京林业大学信息学院数据结构考研复试题库
  7. 一元多项式的表示和相加【数据结构】
  8. python3 asyncio 爬虫_python3 asyncio异步新浪微博爬虫WeiboSpider
  9. 最全的B端产品经理干货知识(3)
  10. 进阶必看的 RocketMQ ,就这篇了!
  11. 基于深度学习算法的NLP集成工具
  12. 实验六:流类库与I/O
  13. 深度学习系列(二)【人类语言处理--语音辨识】
  14. android 字体像素转换工具类_Android点9图机制及在聊天气泡中的应用
  15. qt 定义一个长度的数组_6.8 C++字符数组
  16. DB2的下载、图解安装、可能出现的问题(一篇解决)
  17. npm : command not found 问题
  18. python数列_Python斐波拉契数列
  19. 计算机信息数字化基础1测验题,20春-计算机信息技术-章建民-1-中国大学mooc-题库零氪...
  20. php.c drcom,成功 将校园客户端drcom搞进openwrt

热门文章

  1. 浅谈Kubernetes Service负载均衡实现机制
  2. Python类和对象的入门级讲解(简单粗暴)
  3. 求出所有这些四位数是素数的个数cnt,再把所有满足此条件的四位数依次存入数组b中,然后对数组b中的四位数按从小到大的顺序进行排序
  4. Netty的EventLoop
  5. 思维导图学Java编程思想
  6. Docker系列五~docker安装php-fpm
  7. RabbitMQ七种队列模式介绍与应用场景(通俗易懂)
  8. Java多线程编程系列-多线程基础
  9. 装载鸿蒙系统,华为3-4月份将正式推送鸿蒙系统 第三方装载量也将达到一个亿...
  10. 使用JsonConfig控制JSON lib序列化