一个Bean 就是一个类。我们不必为制造任何的Bean而编写一些特殊的代码或者使用特殊的编程语言。事实上,我们唯一需要做的是略微地修改我们对我们方法命名的办法。方法名通知应用程序构建工具是否是一个属性,一个事件或是一个普通的方法。
在Java 的文件中,命名规则被错误地曲解为“设计范式”。这十分的不幸,因为设计范式惹来不少的麻烦。命名规则不是设计范式,它是相当的简单:
(1) 因为属性被命名为xxx,我们代表性的创建两个方法:getXxx()和setXxx()。注意get 或set 后的第一个字母大写以产生属性名。“get”和“set”方法产生同样类型的自变量。“set”和“get”的属性名和类型名之间没有关系。
(2) 对于布尔逻辑型属性,我们可以使用上面的“get”和“set”方法,但我们也可以用“is”代替“ get”。
(3) Bean 的普通方法不适合上面的命名规则,但它们是公用的。
(4) 对于事件,我们使用“listener(接收器)”方法。这种方法完全同我们看到过的方法相同:
(addFooBarListener(FooBarListener)和removeFooBarListener(FooBarListener)方法用来处理FooBar 事件。大多数时候内建的事件和接收器会满足我们的需要,但我们可以创建自己的事件和接收器接口。
上面的第一点回答了一个关于我们可能注意到的从Java 1.0 到Java 1.1 的改变的问题:一些方法的名字太过于短小,显然改写名字毫无意义。现在我们可以看到为了制造Bean 中的特殊的组件,大多数的这些修改不得不适合于“get”和“set”命名规则。
Bean代码示例:
1 //: Frog.java 2 // A trivial Java Bean 3 package frogbean; 4 import java.awt.*; 5 import java.awt.event.*; 6 class Spots {} 7 public class Frog { 8 private int jumps; 9 private Color color; 10 private Spots spots; 11 private boolean jmpr; 12 public int getJumps() { return jumps; } 13 public void setJumps(int newJumps) { 14 jumps = newJumps; 15 } 16 public Color getColor() { return color; } 17 public void setColor(Color newColor) { 18 color = newColor; 19 } 20 public Spots getSpots() { return spots; } 21 public void setSpots(Spots newSpots) { 22 spots = newSpots; 23 } 24 public boolean isJumper() { return jmpr; } 25 public void setJumper(boolean j) { jmpr = j; } 26 public void addActionListener( 27 ActionListener l) { 28 //... 29 } 30 public void removeActionListener( 31 ActionListener l) { 32 // ... 33 } 34 public void addKeyListener(KeyListener l) { 35 // ... 36 } 37 public void removeKeyListener(KeyListener l) { 38 // ... 39 } 40 // An "ordinary" public method: 41 public void croak() { 42 System.out.println("Ribbet!"); 43 } 44 } //