那么,欢呼吧!!!J2SE 5.0 beta已经发布,其中包含了JSR 201 (目前处于public review状态)的实现,JSR 201中包含了新的语言特性:enum,我想我应该去试试看。下面就是得到得到的结果,敢于试试看的就来吧。
深入
这里列出了定义和使用枚举类型的一个例子(取自JSR 201 文档).
Java代码
public class Card
{
public enum Suit {HEART, DIAMOND, CLUB, SPADE};
public enum Rank {ACE, TWO, THREE, FOUR, FIVE, SIX, SEVEN,
EIGHT, NINE, TEN, JACK, QUEEN, KING};
private final Suit suit;
private final Rank rank;
public Card(Suit suit, Rank rank); {
this.suit = suit;
this.rank = rank;
}
public Suit getSuit(); {
return suit;
}
public Rank getRank(); {
return rank;
}
public String toString(); {
return rank + " of " + suit;
}
public static void main(String... args); {
Card upMySleeve = new Card(Suit.HEART, Rank.ACE);;
System.out.println("what is up my sleeve " + upMySleeve);;
// outputs: what is up my sleeve ACE of HEART
}
}
Java代码
public class Card
{
public enum Suit {HEART, DIAMOND, CLUB, SPADE};
public enum Rank {ACE, TWO, THREE, FOUR, FIVE, SIX, SEVEN,
EIGHT, NINE, TEN, JACK, QUEEN, KING};
private final Suit suit;
private final Rank rank;
public Card(Suit suit, Rank rank); {
this.suit = suit;
this.rank = rank;
}
public Suit getSuit(); {
return suit;
}
public Rank getRank(); {
return rank;
}
public String toString(); {
return rank + " of " + suit;
}
public static void main(String... args); {
Card upMySleeve = new Card(Suit.HEART, Rank.ACE);;
System.out.println("what is up my sleeve " + upMySleeve);;
// outputs: what is up my sleeve ACE of HEART
}
}
某些语言中,枚举类型只不过是披着羊皮的int。但是在上面的例子中,Suit是一个真正的class。实际上,他是java.lang.Enum的一个子类。
枚举类型Suit经过编译以后的代码可能是这个样子。实际上,枚举类型Suit中的每一个常量都是被声明为public static final的Suit的一个实例。
Java代码
// This is sort of what happens.
public class Suit extends Enum {
public static final Suit HEART = new Suit("HEART", 1);;
public static final Suit DIAMOND = new Suit("DIAMOND", 2);;
public static final Suit CLUB = new Suit("CLUB", 3);;
public static final Suit SPADE = new Suit("SPADE", 4);;
public Suit(String name, int ordinal); { super(name, ordinal);;}
// some more stuff here
}
Java代码
// This is sort of what happens.
public class Suit extends Enum {
public static final Suit HEART = new Suit("HEART", 1);;
public static final Suit DIAMOND = new Suit("DIAMOND", 2);;
public static final Suit CLUB = new Suit("CLUB", 3);;
public static final Suit SPADE = new Suit("SPADE", 4);;
public Suit(String name, int ordinal); { super(name, ordinal);;}
// some more stuff here
}
但是这不是全部,如果你仔细看看java.lang.Enum,你就会张大嘴巴,因为你会看见Enum实际上被声明成一个泛型类Enum
我的第一反应是"这是他妈的什么意思?” 答案在下面,但是我们要先热热身。
Foo
你的大脑神经元已经在Java 代码List
考虑下面的代码
T 是一个类型参数(A),其意味着Foo的class body实际上已经被某种类型(任何类型)T所参数化。1。类型T(几乎)可以出现在class body的任何地方而不用担心T实际上是什么类型。
2。类型参数的语义取决于编写类Foo的人。集合类使用类型参数来表明“这个一个T的集合”;其语义可以在javadoc中找到。对于更加通用的Foo
3。这里真正要说的是 ,类型参数实际上允许用户在调用函数方法的时候,不用cast就可以使用特定类型
那么java.lang.Class
如果你查看JDK 1.5 javadoc,你就会发现java.lang.class如今有了一个类型参数av