分页: 5/10 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]

java泛型学习(转载) 不指定

海蓝 , 2008/07/25 22:31 , Program Life - Java , 评论(0) , 阅读(381) , Via 本站原创
转载自: http://blog.csdn.net/judasf/archive/2008/04/03/2246625.aspx
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。

  Java语言引入泛型的好处是安全简单。

  在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。

  泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

  泛型在使用中还有一些规则和限制:

  1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。

  2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。

  3、泛型的类型参数可以有多个。

  4、泛型的参数类型可以使用extends语句,例如。习惯上成为“有界类型”。

  5、泛型的参数类型还可以是通配符类型。例如Class classType = Class.forName(java.lang.String);

Tags: ,
很多朋友用了中文版的Eclipse后发现不习惯里面的字体,我也是这样,可以使用下面的方法改回英文版的字体,界面还是中文版的
1.更改java文件大小设置
Window->preferences->General->Appearance->Colors   and   Fonts->
Java->Java Editor Text Font->右边按钮Change
英文版默认的是Courier New 常规 10
2.更改jsp文件大小设置(此设置也同事更改其他类型文件的字体大小,例如xml等)
Window->preferences->General->Appearance->Colors   and   Fonts->
Basic->TextFont->右边按钮Change
英文版默认的是Courier New 常规 10

改成中文版后很不习惯里面的字体,还是改回英文版的字体,界面还是中文版的

大功告成:)

--------------------------------补充--------------------------------
今天一个同事碰巧搜到了这篇文章,心中暗喜,哇哈
同事发现了我这篇文章的一个问题,就是不能用方法1修改xml文件的字体,后来发现在方法2Window->preferences->General->Appearance->Colors   and   Fonts->
Basic->TextFont->右边按钮Change
这个设置可以更改xml文件字体设置的。
Tags: ,
转自:http://www.cnblogs.com/kid-li/archive/2006/05/29/412180.html

        Adapter适配器模式是一种结构型模式,主要应对:由于应用环境的变化,常常需要将“一些现

存的对象”放在新的环境中应用,但是,新环境要求的接口是现存对象所不满足的。

Adapter模式-适配器模式的一个完整例子
1.首先定义一个IShape接口

/**
* 定义一个"形状"的接口
* @author ldsea
*
*/
public interface IShape {
  public void setPosition(int position);
  public int getPositon();
  public void move();
  public void display();
}


2.定义一个矩形类,实现这个接口

/**
* 一个矩形类,实现IShape接口,实现接口中定义的4个方法
* @author ldsea
*
*/
public class Square implements IShape{

  int position;
  @Override
  public int getPositon() {
    // TODO Auto-generated method stub
    return position;
  }

  @Override
  public void move() {
    // TODO Auto-generated method stub
    System.out.println("The Square's position has been move to  "+2*position);
  }

  @Override
  public void setPosition(int position) {
    // TODO Auto-generated method stub
    this.position=position;
  }

  @Override
  public void display() {
    // TODO Auto-generated method stub
    System.out.println("The Square's position is:"+position);
  }
  
}


3.现在想定义一个圆形类,Circle类,发现目前已经存在一个Circle类,假设该类不允许我们修改,或者说该类已经被项目中的其他类所集成或引用,如果修改的话,会引起其他程序的错误。该Circle类如下:

/**
* 想再创建一个圆类,现在已经存在一个Circle类,但是它没有实现IShape接口,该类
* 里的方法是我们需要的部分方法,没有实现Move方法,按照Adapter模式原则,不应修改此类,应该创建一个适配器类
* @author ldsea
*
*/
public class Circle {
  int position;
  public void setPosition(int position){
    this.position=position;
  }
  public int getPosition(){
    return position;
  }
  public void display(){
    System.out.println("The Circle's postion is:"+position);
  }
}


如上所示,该Circle类没有实现ISape,而且没有move的方法,那么我们需要创建一个适配器类来完成这个工作,而不用重新写一个Circle类
4.定义一个CircleAdapter适配器类

/**
* Circle的适配器类,实现IShape接口,重用Circle类的方法
* @author ldsea
*
*/
public class CircleAdapter implements IShape{

  private Circle circle;

  public CircleAdapter(){
    circle = new Circle();
  }
  @Override
  public void display() {
    // TODO Auto-generated method stub
    circle.display();
  }

  @Override
  public int getPositon() {
    // TODO Auto-generated method stub
    return circle.getPosition();
  }

  @Override
  //为Circle扩展Move()的方法
  public void move() {
    // TODO Auto-generated method stub
    System.out.println("The Circle's position has been move to  "+2*getPositon());
  }

  @Override
  public void setPosition(int position) {
    // TODO Auto-generated method stub
    circle.setPosition(position);
  }

}


5.下面写一个测试类来测试这些类

/**
* 该Apapter模式的Test类
* @author ldsea
*
*/
public class TestApapter {

  /**
   * @param args
   */
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    Square square = new Square();
    square.setPosition(100);
    square.display();
    square.move();
    CircleAdapter circle = new CircleAdapter();
    circle.setPosition(1000);
    circle.display();
    circle.move();
  }

}


6.输出结果如下:

The Square's position is:100
The Square's position has been move to  200
The Circle's postion is:1000
The Circle's position has been move to  2000
Adapter模式,中文解释为适配器模式,那什么是Adapter模式那?我们先来看看GOF的《设计模式》是如何解释的:

    将一个类的接口转换成客户希望的另外一个接口,Adapter使原本由于接口不兼容而不能一起工作的类可以一起工作。

     是不是觉得很拗口,有点不知所挫?我们再来看看《设计模式解析》上的解释:

    我们需要一种方式,为一个功能正确但接口不合的对象创建一个新接口。

     这句话可能不像刚才那么拗口,但初学者可能任然有点云里雾里,那我们就用一个实例来完整的解释一下Adapter模式:

首先,假设我们在设计一个关于形状的程序(这也是Thinking in Java常用的例子),我们首先要创建一个父类:
  


class Shape{
public void setLocation(...){}
public ... getLocation(){}
public void display(){}
......
}

然后,我们有3个类分别为:点类,线类,矩形类都继承自父类:


class Point extends Shape{
public void setLocation(...){...}
public ... getLocation(){...}
public void display(){...}
...
}



class Line extends Shape{
public void setLocation(...){...}
public ... getLocation(){...}
public void display(){...}
...
}


class Square extends Shape{
public void setLocation(...){...}
public ... getLocation(){...}
public void display(){...}
...
}

    好了,现在我想再创建一个椭圆类,肯能你会说:“简单,像上面一样创建一个类然后继承Shape类不就好了吗”。但是现在现成的椭圆类我已经有了,代码如下:


class XXCircle{
public void setLocationlt(...){...}
public ... getLocationlt(){...}
public void displaylt(){...}
...
}


    现在我虽然有一个XXCircle类,但它并不继承自Shape类,虽然它里面的方法内容是我想要的,但方法名却和我定义的方法名却有些出入(注意红色字体),你可能已经迫不及待的想把方法中的内容一个一个麻烦的复制粘贴到自己的Circle类中了,不用急,让我们来看看Adapter模式是如何帮我们设计Circle类的吧:


class Circle extends Shape{
private XXCircle myXXCircle;
public Circle(){
  myXXCircle=new XXCircle();
}
public void setLocation(...){
  myXXCircle.setLocationlt(...);
}
public ... getLocation(){
  myXXCircle.getLocationlt();
}
public void display(){
  myXXCircle.displaylt();
}
...
}


     看到了吧,我们只需将XXCircle类包装起来就可以将代码进行重用,虽然现成的XXCircle类在接口上可能不合,但它的功能是我们需要的,利用Adapter模式我们就能很好的利用它了。(在结束之前,请再看一下本文最上面的红体字,现在你能明白大师们对Adapter模式的解释了吗?)

分页: 5/10 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]