为什么android中parcelable的实现需要CREATOR
2018-03-06 12:12
344 查看
在查看parcelable的使用使用方法时有提到,实现parcelable的类必须有一个静态域CREATOR 实现creator<T>接口,但是并未说明为什么,代码查看在java FW层也查看不到其使用的地方,但是比较困惑,今天在重温java编程思想的时候,看到一个例子,豁然开朗,废话不多说,上代码:package designandpatternTest;
/**
* This class is written for the example to illustrate the interface and the
* innerclass, and how to use the Factory pattern, and it may reveal why the
* parcelable in the android must have a CREATOR static field
*
* see how the FACTORY field works just like the parcelabel CREATOR field in the android.
*
* @author bdgong
*
*/
interface Game {
boolean move();
}
interface GameFactory {
Game getGame();
}
class Checkers implements Game {
private Checkers() {
}
private int moves = 0;
private static final int MOVES = 3;
public boolean move() {
System.out.println("Checkers move " + moves);
return ++moves != MOVES;
}
public static final GameFactory FACTORY = new GameFactory() {
public Game getGame() {
return new Checkers();
}
};
}
class Chess implements Game {
private Chess() {
}
private int moves = 0;
private static final int MOVES = 4;
public boolean move() {
System.out.println("Chess move " + moves);
return ++moves != MOVES;
}
public static final GameFactory FACTORY = new GameFactory() {
public Game getGame() {
return new Chess();
}
};
}
public class InnerClassForFactory {
static void playGame(GameFactory factory) {
Game s = factory.getGame();
while (s.move());
}
public static void main(String[] args) {
playGame(Checkers.FACTORY);
playGame(Chess.FACTORY);
}
}以上FACTORY的使用应该可以揭示CREATOR的使用,这也是工厂方法的一个典型使用方式。
以记之。
/**
* This class is written for the example to illustrate the interface and the
* innerclass, and how to use the Factory pattern, and it may reveal why the
* parcelable in the android must have a CREATOR static field
*
* see how the FACTORY field works just like the parcelabel CREATOR field in the android.
*
* @author bdgong
*
*/
interface Game {
boolean move();
}
interface GameFactory {
Game getGame();
}
class Checkers implements Game {
private Checkers() {
}
private int moves = 0;
private static final int MOVES = 3;
public boolean move() {
System.out.println("Checkers move " + moves);
return ++moves != MOVES;
}
public static final GameFactory FACTORY = new GameFactory() {
public Game getGame() {
return new Checkers();
}
};
}
class Chess implements Game {
private Chess() {
}
private int moves = 0;
private static final int MOVES = 4;
public boolean move() {
System.out.println("Chess move " + moves);
return ++moves != MOVES;
}
public static final GameFactory FACTORY = new GameFactory() {
public Game getGame() {
return new Chess();
}
};
}
public class InnerClassForFactory {
static void playGame(GameFactory factory) {
Game s = factory.getGame();
while (s.move());
}
public static void main(String[] args) {
playGame(Checkers.FACTORY);
playGame(Chess.FACTORY);
}
}以上FACTORY的使用应该可以揭示CREATOR的使用,这也是工厂方法的一个典型使用方式。
以记之。
相关文章推荐
- android实现Parcelable方法时候需要注意的
- 安装在Android机器上的截图程序实现,需要root
- Android:::PC套件实现所需要的原理和协议
- Android 截图程序实现 需要root权限
- 在Android中,可以自定义类,继承ViewGroup等容器类,以实现自己需要的布局显示。
- Android 截图程序实现 需要root权限 (调用linux 命令)
- serlvet为什么只需要实现doGet和doPost
- 为什么Android系统需要使用C、C++和Java语言共同开发
- 关于Session(javax.servlet.HttpSession)持久化----为什么实体类需要实现序列化接口
- 记录一下开源DLNA协议栈(cyberlink for java)在android平台实现的Media Renderer为什么发现不了
- Android实现Parcelable对象序列化的实例
- 在Android上实现SSL握手(客户端需要密钥和证书),实现服务
- Android开发:使用序列化接口Parcelable、Serializable实现Activity间传递复杂数据类型参数
- 在Android上实现SSL握手(客户端需要密钥和证书),实现服务器和客户端之间Socket交互
- android 为什么需要签名
- android 自动划屏效果 在这里,我们需要用到google提到的一个包——android-support-v4.jar,这个包是为了方便实现android view之间的切换,关
- ID的生成策略(hibernate的id生成策略,主键类为什么需要实现序列化接口,同时还要重写hashCode()和equals()方法)
- 为什么需要htons(), ntohl(), ntohs(),htons() 函数 .模拟htonl、ntohl、htons、ntohs函数实现
- 关于Session(javax.servlet.HttpSession)持久化----为什么实体类需要实现序列化接口
- 为什么oracle需要三层嵌套来实现分页