Java泛型与Restlet客户端
写一个与restlet服务器通信的客户端类,用于测试通信是否成功,并且进行交互。为了方便其他人使用,于是,写一个通用的方法封装起来,可是中途却放生了一些问题。
按照正常写法,顺序走下来是这样的:
public static void main(String args[]){
String url="http://localhost:8888/hi";
ClientResource clientResource=new ClientResource(url);
User user=new User();
user.setName("zz");
user.setAge("12");
Representation representation=clientResource.post((new JacksonRepresentation<User>(user)));
JacksonRepresentation<User> jacksonRepresentation=new JacksonRepresentation<User>(representation,User.class);
try {
User user1=jacksonRepresentation.getObject();
System.out.println(user1.getName());
System.out.println(user1.getAge());
} catch (IOException e) {
e.printStackTrace();
}
}
这样没什么问题,可以成功拿到服务器返回的数据,于是在这个基础上把restlet的东西包装起来。这样写的:
public static Object getServerResponse(String url,Object user){
ClientResource clientResource=new ClientResource(url);
Representation representation=clientResource.post((new JacksonRepresentation<Object>(user)));
JacksonRepresentation<Object> jacksonRepresentation=new JacksonRepresentation<Object>(representation,Object.class);
Object o=null;
try {
o=jacksonRepresentation.getObject();
} catch (IOException e) {
e.printStackTrace();
}
return o;
}
这样在main方法中,把object转换为User就可以了。但是转换过程中,会报一个错误:
Exception in thread "main" java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to test.User
无法将LinkedHashMap转换为User,代码中并没有用到LinkedHashMap,应该是restlet转换过程中才发生的这个问题。后来纠结了半天,问了一下比较有经验的同事,才知道上面的转换,并没有给返回的类型明确的定义,只转换为object,这样是不可以的。
经过改造,最后写法是这样的:
public static<T, V> V get(String url, T data, Class<V> response) {
ClientResource clientResource=new ClientResource(url);
Representation representation=clientResource.post((new JacksonRepresentation<T>(data)));
JacksonRepresentation<V> jacksonRepresentation=new JacksonRepresentation<V>(representation, response);
try {
return jacksonRepresentation.getObject();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
这样,使用泛型,在这个封装的方法中,指定了返回数据的类型,这样就不会出现之前的错误。
Java泛型与Restlet客户端的更多相关文章
- 【Java心得总结四】Java泛型下——万恶的擦除
一.万恶的擦除 我在自己总结的[Java心得总结三]Java泛型上——初识泛型这篇博文中提到了Java中对泛型擦除的问题,考虑下面代码: import java.util.*; public clas ...
- 学习记录 java泛型资料
java泛型资料: 1. 概述在引入范型之前,Java类型分为原始类型.复杂类型,其中复杂类型分为数组和类.引入范型后,一个复杂类型就可以在细分成更多的类型.例如原先的类型List,现在在细分成Lis ...
- 转:有关Java泛型的类型擦除(type erasing)
转载自:拈花微笑 自从Java 5引入泛型之后,Java与C++对于泛型不同的实现的优劣便一直是饭后的谈资.在我之前的很多training中,当讲到Java泛型时总是会和C++的实现比较,一般得出的结 ...
- Java——泛型
前言 一般的类和方法,使用的都是具体的类型:基本类型或者自定义的类.如果我们要编写出适用于多种类型的通用代码,那么肯定就不能使用具体的类型.前面我们介绍过多态,多态算是一种泛化机制,但是也会拘泥于继承 ...
- 深入理解什么是Java泛型?泛型怎么使用?【纯转】
本篇文章给大家带来的内容是介绍深入理解什么是Java泛型?泛型怎么使用?有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所助. 一.什么是泛型 “泛型” 意味着编写的代码可以被不同类型的对象所 ...
- JAVA泛型知识(一)
Java泛型知识(二)<? extends T>和<? super T> Java1.5泛型指南中文版(Java1.5 Generic Tutorial) 目 录 ...
- java 泛型实例详解(普通泛型、 通配符、 泛型接口)
java 泛型详解(普通泛型. 通配符. 泛型接口) 2013-02-04 19:49:49| 分类: JAVA | 标签:java |举报|字号 订阅 下载LOFTER客户端 JDK1.5 令我们期 ...
- Java泛型的历史
为什么Java泛型会有当前的缺陷? 之前的章节里已经说明了Java泛型擦除会导致的问题,C++和C#的泛型都是在运行时存在的,难道Java天然不支持“真正的泛型”吗? 事实上,在Java1.5在200 ...
- 浅析Java 泛型
泛型是JavaSE5引入的一个新概念,但是这个概念在编程语言中却是很普遍的一个概念.下面,根据以下内容,我们总结下在Java中使用泛型. 泛型使用的意义 什么是泛型 泛型类 泛型方法 泛型接口 泛型擦 ...
随机推荐
- Dell 服务器安装方法介绍
大家都知道dell服务器在安装windows系统时都需要有raid卡驱动的加载才可以人道服务器硬盘,下面来介绍一下dell服务器raid卡驱动的加载和系统的安装: 方法一: 使用dell服务器自带的 ...
- 7.Reverse Integer (INT; Overflow)
Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 思路:要注意溢出 ...
- wordpress 下载主题模板、更新报错 No working transports found解决办法
出错原因是PHP没有开启curl. windows下开启方法如下 1. 将php.ini中的;extension=php_curl.dll前的分号去掉, 2. 将php中libeay32.ll, ss ...
- day7:vcp考试
Q121. An ESXi 6.x host in the vCenter Server inventory has disconnected due to an All Paths Down (AP ...
- Excel单元格内容拆分、合并
例:如何将EXCEL单元格A1中的“1-2-1”,在B1.C1.D1单元格中分别显示”1“.”2“.”1“.方法一: 在B1中输入“=mid(A1,1,1)”在C1中输入“=mid(AI,3,1)”在 ...
- OC 线程操作 - GCD使用 - 栅栏函数
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //同步函数无需栅栏函数 //栅栏 ...
- LocalBroadcastManager 的使用
一.使用本地广播发送一条广播(本例为自己发送自己接收,本地广播也可以是其他应用接收)然后接收到广播时回调Receiver类中的回调方法onReceive()在此方法中自定义发出通知 代码 packag ...
- Linux 下 FastDFS v5.08 分布式文件系统的安装
一.系统安装目录 源代码包目录 /data/wwwroot libevent安装目录 /usr/local/libevent FastDFS安装目录 /data/fastdfs nginx安装目录 / ...
- [Selenium]显式等待 Explicit wait & 隐式等待 Implicit wait
显式等待 Explicit wait 显示等待 , 就是明确的要等到某个元素出现或者某个元素满足某种条件,每隔一段时间检查一次,等不到,就一直等,如果在规定的时间内还没有找到,就跳出来检查间隔的时间和 ...
- 给Array添加去重原型方法
Array.prototype.unique = function(){ var newArray = []; var oldArray = this; if(oldArray.length<= ...