论坛首页 Java企业应用论坛

java编程思想之问题

浏览 6856 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2014-11-04  

java编程思想读打第17章了,我越发的发现很多在实际项目中没有用到的在书中却用了很大的篇幅去讲的知识,而且感觉还很难,很不好理解,如泛型,特别的是内部类,书中很多地方的代码都有内部类,可是在实际项目中好像没怎么用,关键是内部类理解起来很费劲啊,请大神赐教

   发表时间:2014-11-05  
泛型和内部类,在实际工作中是经常用到吧?
所有的语言特性,都是在特定情况下简化开发工作的,建议学习和实际工作结合起来。
0 请登录后投票
   发表时间:2014-11-05  
如果做javaee,内部类用得应该不多。但是泛型的话jdk1.5之后,可以说是必用的
0 请登录后投票
   发表时间:2014-11-05  
呵呵,不用泛型的话满篇的黄色下滑线,强迫症看了一定会暴走
0 请登录后投票
   发表时间:2014-11-06  
对,我们大多数也只是在list后加泛型,仅此而已了吧?泛型方法用的不多吧,你看泛型在java编程思想是独立一章的,讲了很多,可我们也只是在list后加泛型,我说的对吧,还有内部类你自己创建的类中你会加入内部类吗,很少吧?
0 请登录后投票
   发表时间:2014-11-06  
其实你说的还是有道理的,从数量上来说,真正我们自己利用到自己构建的泛型和内部类的机会,是少之又少。一是和你做web系统有关,二是有些地方可以有其他选择(人常规思维往往会找原始的套路,而不是去凑这些高级功能,当然熟练后可能第一时间会想到高级功能)哈哈说了好多废话

我们能用到的场景:

泛型:
我们想构建一个针对任意对象的底层通用方法,做些事情,并返回一个内部包含指定类型的数据结构。我们当然可以返回Object,在调用方法处强转。那么高级做法就是将这个通用方法附带上泛型,比如<T>,这样上层调用就无需强转。可读性要好很多,还显得你很专业~

内部类:
普通的内部类完全可以用常规类代替,主要考虑到业务逻辑上的划分,或者某个类实在不会被其他人直接调用,这时候可以考虑放在内部。举个例子,HashMap就有一个内部类Map.Entiry,因为它实在不会被其他人调用了。但要是不封装成类,把属性散落在HashMap里,就显得丑丑的。

匿名内部类&接口:
事实上常年做web系统的人,说老实话,接口都不一定真正会用。虽然所谓的service层,dao层都会各带一层接口,但这都是给spring用的,而不是给自己用。当你将接口和匿名内部类联合使用一次,就能真正体会接口的奇妙之处,而不是面试题般的“接口与抽象类的区别”。

0 请登录后投票
   发表时间:2014-11-06  
说的很具体,高手啊,说的真明白。
再问一句“当你将接口和匿名内部类联合使用一次,就能真正体会接口的奇妙之处”这句话,我没有这个体会,能不能有实例啥的,请指教
0 请登录后投票
   发表时间:2014-11-06   最后修改:2014-11-06
先给你来一个函数式语言的例子,javascript
方法1:做手机的整个流程
function makePhone(diyFunc){
   //1. 调用制作配件方法
    ...
   //2. 调用组装配件方法
    ...
   //3. 调用用户特殊要求方法!!!!!
   diyFunc();
    ...
   //4. 调用包装手机方法
}


方法2:用户特殊要求方法
var userDIY = function(){
   console.log("刻一段话在手机上")
}


于是我们代码就写成:
makePhone(userDIY);

或者
makePhone(function(){
  console.log("刻一段字在手机上");
})

于是我们就将一个函数给传入另一个方法中使用了!

再来看Java怎么做,但是发现Java做不了,因为Java是一门纯oo的语言,不是函数式语言,无法传递函数。
但是以上的例子依然可以做,虽然稍微麻烦了一点。

首先定义一个接口:
public interface UserDIY {
  public void doDIY();
}

于是我们的代码就变成:

factory.makePhone(new UserDIY(){
   @Override
   public void doDIY(){
      System.out.println("刻一段字在手机上");
   }
});


相比较而言,比js代码更多了点,但本质是一样的,为了将函数传递进另一个函数。从这个意义上看,java接口在某种层面上弥补了Java在OO的缺陷。

这就是奇妙之处:p
0 请登录后投票
   发表时间:2014-11-06  
作为工具书,当然是越详细越好。
读书是为了学以致用,读不明白或不常用的,可以了解下就先过了。
需要时再看,用的多了自然就懂了。
0 请登录后投票
   发表时间:2014-11-06  
white_crucifix高手,你说的我明白一点了,但是关于内部类一直有一点我很迷糊
class DirList{
public static void main(final String[] args) {
File path = new File(".");
String[] list;
if(args.length == 0){
list = path.list();
}else{
list = path.list(new FilenameFilter(){
private Pattern pattern = Pattern.compile(args[0]);
public boolean accept2(File dir, String name) {
return pattern.matcher(name).matches();
}
});
}

Arrays.sort(list,String.CASE_INSENSITIVE_ORDER);
for (String s : list) {
System.out.println(s);
}
}

}
这是编程思想io那章的一个例子代码,其中用到了内部类,我一直不明白的是accept2()方法,没有被调用啊,怎么就走这个方法了呢?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics