关于泛型接口我的初理解
2015-03-13 20:55
239 查看
一背景
以下是本人在百度知道看到的关于泛型接口的一个回答,地址是:http://zhidao.baidu.com/question/195124074.html
现在我刚刚接触泛型接口。有点不 4000 理解。所以百度了一下,看到了这个会回答。
我打算写下我的理解(先说明我刚刚接触泛型接口,所以我下面先展示原文,再写下我的理解,只供参考,我关于它我有更新的认识会更新)
二原文
以下是原文:
应该是我很久没有好好学技术了,有时候想用的时候却发现不会写,比如今天遇到了泛型接口,所以要记录一下,这样才能更明白... 在这里我并不想说泛型接口怎么写,这个很简单,后面会写的,只是想说我为什么要用. 泛型接口的意图是什么?请看如下的问题: Java代码 abstract class BaseBean{ //略 } Interface IA{ public BaseBean doSomething(); } 下面我们继承这个BaseBean Java代码 class ChildBean extends BaseBean{ } 接下来实现接口 Java代码 class IAImpl implements IA{ public BaseBean doSomething(){ return new ChildBean(); } } 好了这是惯常的写法,但是同学们有没有发现一个问题当你返回得到BaseBean的时候其实你需要的是他的实例而不是这个真实的Bean,而当你强转时又需要注意两点: NullPoint 和 类型是否对,这个很麻烦,因为调用者完全不知道调用什么.那么我们来描述我们需要什么: 我们需要IA的doSomething返回的是一个对象这个对象extends于BaseBean 那么接下来我们就用泛型接口吧: Java代码 Interface IA<T extends BaseBean>{ public T doSomething(); } class IAImpl implements IA<ChildBean>{ public ChildBean doSomething(){ return new ChildBean(); } } 这样当你调用这个实现的时候就能明确地得到返回的对象类型,清楚明了,这就是泛型接口的使用.其实我们平时一直在用的 Iterable就是这玩意大家可以去看下. 回家准备读下java编程思想中的相关段落. 总结今天收获很大,这里要感谢下灵芝同学给我的帮助,是她告诉了我,我所想要的东西叫泛型接口,感谢... 下次等我把泛型都再重新回炉下,再来把泛型的其他东西讲来听听.
原文结束。
三理解
(下面我按我的理解修改原文)
/*定义一个类BaseBean,它是抽象的,里面各种方法。
我们要做的是找个类继承它(因为它是抽象类),然后获得实现它的这个类指向父类的实例(对象 )(多态),这个是终极目标。*/
abstract class BaseBean{ //略 }
//好了,就像上面说的,接下来,我们找个类实现它,实现它的这个类叫做ChildBean类
class ChildBean extends BaseBean{ }//好了,到了这里我们,得到了ChildBean类,我们用BaseBean b = new ChildBean();就完成了终极目标。
//虽然以上方法可以用,但是我们可以用接口,来实现相同的功能。下面我们再来实现一次终极目标。
//当然,首先定义一个接口叫IA,接口里有一个方法,该方法,返回的类型是BaseBean,它可以通过多态帮助我们实现终极目标。 Interface IA{ public BaseBean doSomething(); } //为什么,它可以呢?下面我用一段代码表示一下。
class ChildBean extends BaseBean{ }
class TextDemo implements IA{
public BaseBean doSomething(){
return new ChildBean();
//有安全隐患}
} //到这里大家可以比较这两种实现方式
//第一种通过一个类继承它,再获得其指向父类的对象。
//第二种是让一个类本身具备方法来获得它。
/*
看到这里大家是不是会感觉用接口的方式有些,画蛇添足的感觉。为什么?
因为你们肯定想到,虽然第二种把实现终极目标把过程封装成方法有一定的优越性
但是我可以直接不实现接口,就像这样做
class TextDemo /*implements IA*/{
public BaseBean doSomething(){
return new ChildBean();
} //也有安全隐患
}
这样不是比较方便吗?我又何必实现一个接口(虽然接口可以多实现),而且两种通过接口的方法都有安全隐患。
它们的安全隐患在于:如果父类BaseBean有多个子类。除了ChildBean还有ChildBean1 , ChildBean2等等等等
那么我们的方法了返回值虽然是父类类型可我们return 的子类可有多种。
那么我们需要的是那个子类?我们无法限制。所以new 后面的各种子类都不会编译报错!
所以强转的时候就会出现问题比如
ChildBean c = (ChildBean)b;
我们不知道b是ChildBean1类型。所以运行时就报错说ChildBean1 无法转成ChildBean类型。
So泛型接口诞生了,它怎么解决这个安全问题呢?
*/
//那么接下来我们就用泛型接口吧:
//回忆上面说过的我们不用接口,直接用方法的理由是因为用接口在这里多此一举。
//那么我们如果通过接口给方法附加限制条件的话,用接口就可以理解了。
//而在这里,给方法限制的条件同过泛型。
//此时实现了的终极目标具有方法的优越性,和安全性! Interface IA<T extends BaseBean>{ public T doSomething(); } class IAImpl implements IA<ChildBean>{ public ChildBean doSomething(){ return new ChildBean(); } }
//呵呵,买个萌先
//就我目前,我现在还没有真正进入泛型接口的学习(这篇博文写后就学习去),以上是感性的简单的理解,说不对的欢迎拍砖。
三end
java_haha....学习去了.
望共同进步!
相关文章推荐
- 【引】关于接口的理解
- 关于通过.NET Framework 2.0 中 SqlDataSource 控件 Select,Update,Delete,Insert 接口调用 存储过程 的粗浅理解。
- 关于泛型接口的探讨
- C# 关于接口与基类的理解(二者的区别)
- c++关于封装、接口的简单理解
- 关于接口我的理解
- 关于java泛型的简单理解
- 关于default在泛型中的使用以及ICloneable接口中MemberwiseClone的浅表副本以及String.empty
- 关于面象接口编程的理解
- 关于java的接口回调和向上转型的理解
- 关于接口的理解问题
- 一篇关于IDisposable接口的理解
- 混乱的关于接口(Interface)的理解!
- C#关于接口,代理以及事件的理解
- 关于接口的理解。
- 关于接口的理解
- 关于java的接口回调和向上转型的理解
- 关于JAVA中接口的几点理解
- 关于串行通信、通信接口、接口连接器、通信协议的理解
- 关于java的接口回调和向上转型的理解