由于 java 没有通用数组,因此我使用将对象数组转换为类型参数的常规技巧。当我有一个正式的类型参数时,这工作得很好,<T>但当我使用有界类型参数时却不行<T extends something>。
使用正式类型遵循代码效果很好
public class Deck <T> {
private T [] cards;
private int size;
public Deck () {
cards = (T []) new Object[52];
size = 0;
}
}
public class BlackJackGame {
Deck<BlackJackCard> deck;
public BlackJackGame() {
deck = new Deck<>();
populate (deck);
deck.shuffle();
}
}
public class BlackJackCard extends Card {
}
以下使用有界类型的代码会引发错误
public class Deck <T extends Card> {
private T [] cards;
private int size;
public Deck () {
cards = (T []) new Object[52];
size = 0;
}
}
public class BlackJackGame {
Deck<BlackJackCard> deck;
public BlackJackGame() {
deck = new Deck<>();
populate (deck);
deck.shuffle();
}
}
public class BlackJackCard extends Card {
}
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [LCard;
at Deck.<init>(Deck.java:10)
at BlackJackGame.<init>(BlackJackGame.java:5)
qq_遁去的一_1
不负相思意
随时随地看视频慕课网APP
相关分类