//是这样吗?
创新互联建站专注于梅州网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供梅州营销型网站建设,梅州网站制作、梅州网页设计、梅州网站官网定制、微信小程序开发服务,打造梅州网络公司原创品牌,更为您提供梅州网站排名全网营销落地服务。
public class FTestDraw {
public static void main(String[] args) {
DrawMethodShape dm = new DrawMethodShape(new Circle());
dm.shape.draw();
}
}
abstract class Shape{
abstract void draw();
}
class Circle extends Shape{
@Override
void draw() {
System.out.println("这是圆形");
}
}
class Rectangle extends Shape{
@Override
void draw(){
System.out.println("这是长方形");
}
}
class Triangle extends Shape{
@Override
void draw(){
System.out.println("这是三角形");
}
}
class DrawMethodT extends Shape{
T shape = null;
public DrawMethod(T tt){
shape = tt;
}
}
使用 ObjectMapper 和 TypeReference? 示例代码:
static protected T T hget(String json, TypeReference? toValueTypeRef) {
ObjectMapper oMapper = new ObjectMapper();
T o = null;
try {
o = oMapper.readValue(json, toValueTypeRef);
} catch (Exception e) {
} finally {
}
return o;
}
主要是一个编译期的检查,也避免了我们代码中的强制转换,比较经典的用法有泛型DAO,泛型Page的DTO。
现在我要说的是一个挺有趣但是貌似还不是太多的人在代码中使用的方法,前段时间用guava和op4j的时候发现这样的用法,看看了源码,也是很简单的。
比如guava中创建集合的方法 Listxx list = Lists.newArrayList(),这个代替了我们传统的 new ArrayListxx,为什么在=的右边不需要泛型了呢,我们看看源码。
[java] view plaincopy
public static E ArrayListE newArrayList() {
return new ArrayListE();
}
返回类型中带有泛型E,并且这个泛型的来源在 static和 ArrayList之间的位置,我自己的理解是这个就和=左边的一致,可能说的不够专业但是意思应该就这样。
于是我就依样画葫芦在自己的代码中也用了起来。
我要做的是一个仿httpsession机制的自定义协议是session。在httpsession.getAttribute方法返回的是一个
Object,然后我们再类型转换。现在我用返回类型泛型来优化这个代码,以下是我自定义协议session的getAttribute的代码。
[java] view plaincopy
@SuppressWarnings("unchecked")
public E E getAttribute(String key) {
return (E) map.get(key);
}
调用代码
[java] view plaincopy
Boolean isFirst = session.getAttribute("first");
在httpsession中我们则要这么写
[java] view plaincopy
Boolean isFirst = (Boolean)session.getAttribute("first");
泛型的用法还有很多,有新的心得再补充更新