タイプ消去の簡単な理解
17264 ワード
例1:説明タイプ消去
public class TestMessage{
public static void main(String[] args) {
Message<String> message = new Message<>();
Message<Integer> message1 = new Message<>();
System.out.println(message.getClass() == message1.getClass()); //true
System.out.println(message.getClass().getName()); //www.csdn.point.Message
System.out.println(message1.getClass().getName()); //www.csdn.point.Message
}
}
class Message<T> {
private T message;
public void setMessage(T message){
this.message = message;
}
public T getMessage(){
return this.message;
}
@Override
public String toString() {
return "TestMessage{" +
"message=" + message +
'}';
}
}
以上の結果は,両方のタイプが一致し,タイプが消去された後もMessageであることを示している.例2:タイプ消去後、フィールド情報を表示
// ,
public class Point2<T> {
private T x;
private T y;
public void setX(T x) {
this.x = x;
}
public T getX(){
return x;
}
public void setY(T y) {
this.y = y;
}
public T getY() {
return y;
}
@Override
public String toString() {
return "Point2{" +
"x=" + x +
", y=" + y +
'}';
}
public static void main(String[] args) {
Point2<Integer> p2 = new Point2<>();
//
Field[] fields = p2.getClass().getDeclaredFields();
for (Field field:fields){
System.out.println(field.getType().getName());
}
}
}
のように通常のObjectタイプに変換され、上限が
のように指定されている場合、タイプパラメータはタイプ上限に置き換えられます.例:上限タイプ
public class Point6 <T extends CharSequence>{
private T x;
private T y;
public void setX(T x){
this.x = x;
}
public T getX(){
return this.x;
}
public void setY(T y){
this.y = y;
}
public T getY(){
return this.y;
}
@Override
public String toString() {
return "Point6{" +
"x=" + x +
", y=" + y +
'}';
}
public static void main(String[] args) {
Point6<String> p1 = new Point6<>();
//
Field[] fields = p1.getClass().getDeclaredFields();
for(Field field: fields){
System.out.println(field.getType().getName()); //java.lang.CharSequence
}
}
}
以上の結果では,2つの属性x,yのタイプはいずれもCharSequenceである.