@BD ที่ Rivenhill: เนื่องจากคำถามเก่า ๆ นี้ได้รับความสนใจอย่างมากเมื่อปีที่แล้วให้พวกเราไปสักหน่อยเพื่อคุยกัน เนื้อหาของdoIt
วิธีการของคุณไม่ได้ทำอะไรเป็นT
พิเศษเลย นี่มันคือ:
public class Clazz<T> {
static <T> void doIt(T object) {
System.out.println("shake that booty '" + object.getClass().toString()
+ "' !!!");
}
// ...
}
ดังนั้นคุณสามารถปล่อยตัวแปรประเภททั้งหมดและเพียงแค่รหัส
public class Clazz {
static void doIt(Object object) {
System.out.println("shake that booty '" + object.getClass().toString()
+ "' !!!");
}
// ...
}
ตกลง. แต่กลับมาใกล้ชิดกับปัญหาเดิมกันดีกว่า ตัวแปรชนิดแรกในการประกาศคลาสนั้นซ้ำซ้อน ต้องการเพียงวิธีที่สองในวิธีการ ที่นี่เราไปอีกครั้ง แต่ยังไม่ได้คำตอบสุดท้าย:
public class Clazz {
static <T extends Saying> void doIt(T object) {
System.out.println("shake that booty "+ object.say());
}
public static void main(String args[]) {
Clazz.doIt(new KC());
Clazz.doIt(new SunshineBand());
}
}
// Output:
// KC
// Sunshine
interface Saying {
public String say();
}
class KC implements Saying {
public String say() {
return "KC";
}
}
class SunshineBand implements Saying {
public String say() {
return "Sunshine";
}
}
อย่างไรก็ตามมันไม่ได้เกี่ยวอะไรเลยมากนักเนื่องจากเวอร์ชั่นต่อไปนี้ทำงานในลักษณะเดียวกัน สิ่งที่ต้องการคือประเภทอินเตอร์เฟสของพารามิเตอร์ method ไม่มีตัวแปรประเภทที่มองเห็นได้ทุกที่ นั่นเป็นปัญหาดั้งเดิมจริงๆเหรอ?
public class Clazz {
static void doIt(Saying object) {
System.out.println("shake that booty "+ object.say());
}
public static void main(String args[]) {
Clazz.doIt(new KC());
Clazz.doIt(new SunshineBand());
}
}
interface Saying {
public String say();
}
class KC implements Saying {
public String say() {
return "KC";
}
}
class SunshineBand implements Saying {
public String say() {
return "Sunshine";
}
}