Java 中return value的type declare问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 中return value的type declare问题相关的知识,希望对你有一定的参考价值。
我看书上说,如果一个method有返回值,那么之前必须declare a return type,并且返回type必须与declared一致。如:
int theSecret = life.giveSecret();
int giveSecret ( )
return 42;
我的问题是:如果我的method body中是一个if conditional,不同的condition返回的值的类型不一样。比如第一个if 返回int,第二个else if返回String。那么我之前method的return type应该怎么declare?
public Object xxMethod()
if(...)
return 1;
else
return "1";
从这问题看得出来,你是刚接触编程 参考技术B 函数式思维: 利用 Either 和 Option 进行函数式错误处理
http://www.ibm.com/developerworks/cn/java/j-ft13/
Either 旨在保存一个 left 或 right 值(但从来都不会同时保存这两个值)。该数据结构被称为不相交并集。一些基于 C 的语言包含 union 数据类型,它可以保存含若干种不同类型的一个实例。不相交并集的槽可以保存两种类型,但只保存其中一种类型的一个实例。
利用 Either,我可以编写代码来返回异常或 一个合法结果(但从来都不会同时返回两种结果),同时保持类型安全。常见的函数式约定是 Either 类的 left 包含异常(如有),而 right 包含结果。 参考技术C 不要这么做。一定非要如此(例如newInstance方法中)的话就声明为返回它们共同的基类或接口,或者声明成返回object追问
请问什么叫做 “返回他们共同的基类或接口”?您的意思就是说,如果返回值type不同,我就把它们都wrap成object,然后declare返回值的type为object?
追答是的,如果一个方法既可能返回int,又可能返回String,并且无法避免,那么只有声明为返回Object,但是很可能导致误用,只要可以避免就不要这样定义这样的方法
本回答被提问者采纳No converter found for return value of type: class java.util.HashMap + 'Content-Type' cannot
背景说明:
环境:IDEA java语言 springmvc.xml 配置 需要用到fastjson jackson pom.xml中配置了需要用到的包,springmvc.xml中也写了注解驱动
Controller中返回Object类型
到返回Map类型的时候
Controller中代码如下:
@RequestMapping(name="/returnMap.do")
@RequestMapping("/returnMap.do") @ResponseBody //将返回值添加到响应体中 public Object returnMap()throws Exception{ Map<String,String> map = new HashMap<>(); map.put("hello","你好"); map.put("World","先生"); return map; }
运行报: java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.HashMap 说明:首要要看一下library是否导进去,也就是自己写完pom.xml之后有没有reimport,其次看一下注解驱动有没有配置,也就是jackson的那三个包,最后再从其他方面找原因。百度后,又说fastjson版本的问题的,试了无果,加了个
<mvc:annotation-driven> <mvc:message-converters> <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"/> </mvc:message-converters> </mvc:annotation-driven>
也没解决,后边还添加 :
<!-- https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-mapper-asl --> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency>
然后就换成了报:java.lang.IllegalArgumentException: ‘Content-Type‘ cannot contain wildcard type ‘*‘
然后又是一顿百度,试了各种方法还是没能解决问题
然后就看到了下边这个试了一下:错误消除,代码如下
@RequestMapping(name="/returnMap.do",consumes = MediaType.APPLICATION_JSON_VALUE) @ResponseBody //将返回值添加到响应体中 public Object returnMap()throws Exception{ Map<String,String> map = new HashMap<>(); map.put("hello","你好"); map.put("World","先生"); return map; }
改变部分:
@RequestMapping(name="/returnMap.do",consumes = MediaType.APPLICATION_JSON_VALUE)
注意对比 你就会发现哦!
所以导致最后自己都不知道到底是因为那个解决了问题??
BUT,启动后才返现返回来的消息是:
参考链接:
http://www.mamicode.com/info-detail-2562906.html
以上是关于Java 中return value的type declare问题的主要内容,如果未能解决你的问题,请参考以下文章
Unknown return value type [java.lang.Boolean]] with root cause
java.lang.IllegalArgumentException: No converter found for return value of type:
解决java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.A
SpringNo converter found for return value of type: class java.util.ArrayList
No converter found for return value of type: class java.util.ArrayList
No converter found for return value of type: class java.util.ArrayList