网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.开发框架--分析Tomcat下中文的彻.
.JAVA中用接口实现多继承和多态的.
.Java核心代码例程之:ThreadDemo.
.linux下java awt 中中文的处理.
.Java 学习集中营 各种问题的分析.
.使用JDBC创建数据库对象.
.在BS系统中使用模态对话框(showM.
.成功规划SOA:构建您的SOA路线图.
.Java ME下的单元测试开发之JMUni.
.Struts 的优点及其在 Apusic 上的.
.Java:Struts入门初步知识.
.使用DataStream 读写文件.
.专家释疑:轻松提高Java代码的性.
.J2EE的优势.
.Hibernate使用外部Connection的问.
.Think in java 3rd 中文版11.
.java程序如何穿透带有密码验证的.
.关于Apache Axis2的Web service消.
.Javascript实例教程(1) 创建弹出.
.基于JDBC的数据库连接池技术研究.

“javax.microedition.io.Connecotr”研究

发表日期:2008-1-5


在研究在j2me发送短消息的时候,这段代码让我很困惑:
MessageConnection smsconn = null;
try {
  /** Open the message connection. */
  smsconn = (MessageConnection)Connector.open(address);

  TextMessage txtmessage = (TextMessage)smsconn.newMessage(MessageConnection.TEXT_MESSAGE);
  txtmessage.setAddress(address);
  txtmessage.setPayloadText(messageBox.getString());
  smsconn.send(txtmessage);
} catch (Throwable t) {
  System.out.println("Send caught: ");
  t.printStackTrace();
}
1。MessageConnection明明只是一个没有实现的接口类,能够取得它的实例并调用它的方法吗?假如能,它调用的方法体究竟在什么地方?
2。Connector是根据什么来生成一个MessageConnection类的?
决定自己来研究一下以上两个问题。

第一步 写了两个类来测试
public interface InterfaceA {
  public abstract void methodA();
}
public class ClassA {
  public InterfaceA methodA(){
    return new InterfaceA();
  }
}
程序报错,说InterfaceA是抽象的,不能实例化。这说明不能直接在ClassA中实现InterfaceA的实例,那么Connector是怎么返回一个MessageConnection对象的呢?

第二步 对ClassA代码做了如下修改
public class ClassA {
  class ClassB implements InterfaceA{
    public void methodA(){
    }
  }

  public InterfaceA methodA(){
    return new ClassB();
  }

  public void methodB(){
    InterfaceA ia = methodA();
    ia.methodA();
  }
}

哈,编译通过,搞定!原来在ClassA内部或者其它地方实现了InterfaceA接口,这个ClassA作为一个工厂类,由它构造了一个InterfaceA的实现。那么,现在我来看看Connector内部是不是这么实现的。

第三步 Connector类分析
从Connector类的工厂方法实现中(OpenPrim)找到如下代码:
  int colon;
  if(name == null)
    throw new IllegalArgumentException("Null URL");
  colon = name.indexOf(58);
  if(colon < 1)
    throw new IllegalArgumentException("no ':' in URL");
  ConnectionBaseInterface UC;
  String protocol = name.substring(0, colon);
  name = name.substring(colon + 1);
  Class clazz = Class.forName(classRoot + "." + platform + "." +
                              protocol + ".Protocol");

Connector根据传入参数中的URL协议部分来生成相应的类!和我的设想相同:)

本人看来,这种实现方式的好处就在于“隐藏实现”。


上一篇:每个初学者都应该搞懂的问题! 人气:556
下一篇:本源XML数据库Xindice 介绍 (1.0版) 人气:722
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐