ในขณะที่อ่านบทช่วยสอนอย่างเป็นทางการของ Java เกี่ยวกับ generics ฉันพบว่าคุณสามารถ จำกัด อาร์กิวเมนต์ type (ในกรณีนี้คือT
) เพื่อขยายคลาสและ / หรืออินเทอร์เฟซเพิ่มเติมด้วยตัวดำเนินการ 'และ' ( &
) ดังนี้:
<T extends MyClass & Serializable>
ฉันแทนที่&
ด้วย,
(โดยไม่ได้ตั้งใจและยังใช้งานได้พร้อมคำเตือนเล็กน้อย)
คำถามของฉันคือมีความแตกต่างระหว่างสองสิ่งนี้หรือไม่:
<T extends MyClass & Serializable>
<T extends MyClass , Serializable> // here is with comma
และวิธีการตัวอย่าง:
static <T extends MyClass & Serializable> ArrayList<T> fromArrayToCollection(T[] a) {
ArrayList<T> arr = new ArrayList<T>();
for (T o : a) {
arr.add(o); // Correct
}
return arr;
}
5
@ Doorknob คุณสมมติว่า OP ใช้แป้นพิมพ์และแป้นพิมพ์เดียวกับที่คุณใช้
—
emory
@emory ฉันคิดว่ามันผิดทิศทาง - ข้อผิดพลาดไม่ได้อยู่ที่นิ้วของเขา แต่อยู่ในสมองของเขา เหมือนกับว่าคุณพยายามใช้ "รวม" แทน "นำเข้า" ในไฟล์ต้นฉบับ Java คุณพิมพ์คำว่า "รวม" ผิดเพราะสมองของคุณบอกให้คุณพิมพ์สิ่งที่ผิดซึ่งเป็นไปได้จากหลายสาเหตุ
—
Nick Pickering
@Nicholas Pickering ใช่แล้ว! สำหรับฉันมันไม่ใช่การพิมพ์ผิดเพราะคีย์บอร์ด แต่เป็นเพราะสมอง เมื่อคุณเขียนว่าอินเทอร์เฟซใดที่คลาสใช้งานคุณจะคั่นด้วยเครื่องหมายจุลภาค
—
Alin Ciocan