คำถามติดแท็ก generics

Generics เป็นรูปแบบหนึ่งของตัวแปรหลายตัวแปรที่พบในภาษาต่าง ๆ รวมถึงภาษา. NET, Java, Swift และ Rust

6
เครื่องหมายคำถามในพารามิเตอร์ประเภท Java generics หมายถึงอะไร
นี่เป็นข้อมูลโค้ดขนาดเล็กที่นำมาจากตัวอย่างบางส่วนที่มาพร้อมกับ Stanford Parser ฉันได้รับการพัฒนาใน Java ประมาณ 4 ปี แต่ไม่เคยมีความเข้าใจที่ดีมากในสิ่งที่รูปแบบของรหัสนี้ควรจะระบุ List<? extends HasWord> wordList = toke.tokenize(); ฉันไม่กังวลเกี่ยวกับรายละเอียดของรหัส สิ่งที่ฉันสับสนเกี่ยวกับสิ่งที่แสดงออกทั่วไปควรจะถ่ายทอดในภาษาอังกฤษ บางคนสามารถอธิบายเรื่องนี้กับฉันได้ไหม
216 java  generics 

3
ประเภทนี้จะต้องเป็นประเภทอ้างอิงเพื่อใช้เป็นพารามิเตอร์ 'T' ในประเภทหรือวิธีการทั่วไป
ตอนนี้ฉันมีสถานการณ์ที่ฉันต้องการความช่วยเหลือ ฉันพบข้อผิดพลาดในการคอมไพล์ในคลาส 'Derived' ด้านล่างตามที่แสดงในหัวเรื่อง ฉันเห็นโพสต์อื่น ๆ ที่คล้ายกับโพสต์นี้ แต่ฉันไม่เห็นความสัมพันธ์ มีคนบอกฉันว่าจะแก้ไขได้อย่างไร using System; using System.Collections.Generic; namespace Example { public class ViewContext { ViewContext() { } } public interface IModel { } public interface IView<T> where T : IModel { ViewContext ViewContext { get; set; } } public class SomeModel : IModel { …
211 c#  generics 


7
Java generics ต้องการ <เมื่อใด ขยาย T> แทน <T> และมีข้อเสียของการสลับ?
รับตัวอย่างต่อไปนี้ (ใช้ JUnit กับ Hamcrest matchers): Map&lt;String, Class&lt;? extends Serializable&gt;&gt; expected = null; Map&lt;String, Class&lt;java.util.Date&gt;&gt; result = null; assertThat(result, is(expected)); สิ่งนี้ไม่ได้คอมไพล์ด้วยassertThatลายเซ็นเมธอดJUnit ของ: public static &lt;T&gt; void assertThat(T actual, Matcher&lt;T&gt; matcher) ข้อความแสดงข้อผิดพลาดของคอมไพเลอร์คือ: Error:Error:line (102)cannot find symbol method assertThat(java.util.Map&lt;java.lang.String,java.lang.Class&lt;java.util.Date&gt;&gt;, org.hamcrest.Matcher&lt;java.util.Map&lt;java.lang.String,java.lang.Class &lt;? extends java.io.Serializable&gt;&gt;&gt;) อย่างไรก็ตามถ้าฉันเปลี่ยนassertThatลายเซ็นวิธีเป็น: public static &lt;T&gt; void assertThat(T result, Matcher&lt;? extends …
205 java  generics  junit 

13
อะไรคือความแตกต่างระหว่าง Generics ใน C # และ Java ... และ Templates ใน C ++ [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ปิดให้บริการใน6 ปีที่ผ่านมา ล็อคแล้ว คำถามและคำตอบของคำถามนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ฉันใช้จาวาและ generics เป็นส่วนใหญ่ค่อนข้างใหม่ ฉันอ่านต่อไปว่า Java ทำการตัดสินใจผิดหรือว่า. NET มีการใช้งานที่ดีขึ้น ฯลฯ ดังนั้นอะไรคือความแตกต่างที่สำคัญระหว่าง C ++, C #, Java ใน generics? ข้อดี / ข้อเสียของแต่ละคน?
203 c#  java  c++  generics  templates 

7
วิธีอ้างอิงคลาสและเมธอดทั่วไปในเอกสารคู่มือ xml
เมื่อเขียนเอกสาร xml คุณสามารถใช้&lt;see cref="something"&gt;something&lt;/see&gt;งานได้แน่นอน แต่คุณจะอ้างอิงคลาสหรือวิธีที่มีประเภททั่วไปได้อย่างไร public class FancyClass&lt;T&gt; { public string FancyMethod&lt;K&gt;(T value) { return "something fancy"; } } ถ้าฉันจะเขียนเอกสาร xml ที่ไหนสักแห่งฉันจะอ้างอิงคลาสแฟนซีได้อย่างไร? ฉันจะอ้างอิงกได้FancyClass&lt;string&gt;อย่างไร วิธีการเกี่ยวกับอะไร? FancyClass&lt;int&gt;ยกตัวอย่างเช่นในชั้นเรียนที่แตกต่างกันผมอยากที่จะให้ความรู้ผู้ใช้ว่าผมจะกลับมาตัวอย่างของ ฉันจะทำสิ่งที่เห็น cref สำหรับที่?

11
วิธีการคงที่ในชั้นเรียนทั่วไป?
ใน Java ฉันต้องการมีสิ่งต่อไปนี้: class Clazz&lt;T&gt; { static void doIt(T object) { // ... } } แต่ฉันได้ ไม่สามารถทำการอ้างอิงแบบคงที่กับประเภทที่ไม่ใช่แบบคงที่ T ฉันไม่เข้าใจข้อมูลทั่วไปนอกเหนือจากการใช้งานพื้นฐานดังนั้นจึงไม่สามารถเข้าใจได้ มันไม่ได้ช่วยให้ฉันไม่สามารถหาข้อมูลจำนวนมากบนอินเทอร์เน็ตเกี่ยวกับเรื่องนี้ บางคนสามารถอธิบายได้ว่าการใช้ดังกล่าวเป็นไปได้ด้วยวิธีเดียวกันหรือไม่? ทำไมความพยายามเริ่มแรกของฉันถึงไม่สำเร็จ?

23
Generic TryParse
ฉันพยายามสร้างส่วนขยายทั่วไปที่ใช้ 'TryParse' เพื่อตรวจสอบว่าสตริงเป็นประเภทที่กำหนดหรือไม่: public static bool Is&lt;T&gt;(this string input) { T notUsed; return T.TryParse(input, out notUsed); } สิ่งนี้จะไม่รวบรวมเนื่องจากไม่สามารถแก้ไขสัญลักษณ์ 'TryParse' ดังที่ฉันเข้าใจ 'TryParse' ไม่ได้เป็นส่วนหนึ่งของส่วนต่อประสานใด ๆ เป็นไปได้ที่จะทำเลย? ปรับปรุง: ใช้คำตอบด้านล่างฉันมาด้วย: public static bool Is&lt;T&gt;(this string input) { try { TypeDescriptor.GetConverter(typeof(T)).ConvertFromString(input); } catch { return false; } return true; } มันใช้งานได้ค่อนข้างดี แต่ฉันคิดว่าการใช้ข้อยกเว้นในทางนั้นจะไม่เหมาะสมกับฉัน Update2: แก้ไขเพื่อส่งผ่านประเภทแทนที่จะใช้ generics: …
196 c#  generics  tryparse 

10
ความแตกต่างระหว่าง List, List <?>, List <T>, List <E> และ List <Object>
อะไรคือความแตกต่างระหว่างList, List&lt;?&gt;, List&lt;T&gt;, List&lt;E&gt;และList&lt;Object&gt;? 1. รายการ List: typesafeเป็นชนิดดิบดังนั้นจึงไม่ มันจะสร้างข้อผิดพลาดรันไทม์เฉพาะเมื่อแคสต์ไม่ดี เราต้องการข้อผิดพลาดในการรวบรวมเวลาเมื่อนักแสดงไม่ดี ไม่แนะนำให้ใช้ 2. รายการ &lt;?&gt; List&lt;?&gt;เป็นอักขระตัวแทนที่ไม่มีขีด จำกัด แต่ฉันไม่แน่ใจว่ามันมีไว้เพื่ออะไร? ฉันสามารถพิมพ์ได้List&lt;?&gt;โดยไม่มีปัญหา: public static void test(List&lt;?&gt; list){ System.out.println(list); // Works } ทำไมฉันไม่สามารถเพิ่มรายการลงใน a List&lt;?&gt;? public static void test(List&lt;?&gt; list){ list.add(new Long(2)); // Error list.add("2"); // Error System.out.println(list); } 3. รายการ &lt;T&gt; public static void …
194 java  generics 

8
Java: ฉันจะได้รับตัวอักษรในชั้นเรียนจากประเภททั่วไปได้อย่างไร
โดยปกติแล้วฉันเคยเห็นคนใช้ตัวอักษรในชั้นเรียนเช่นนี้: Class&lt;Foo&gt; cls = Foo.class; แต่ถ้าเป็นประเภททั่วไปเช่นรายชื่อจะเป็นอย่างไร วิธีนี้ใช้ได้ผลดี แต่มีคำเตือนเนื่องจากรายการควรได้รับการกำหนดพารามิเตอร์: Class&lt;List&gt; cls = List.class ดังนั้นทำไมไม่เพิ่ม&lt;?&gt;? นี่ทำให้เกิดข้อผิดพลาดประเภทไม่ตรงกัน: Class&lt;List&lt;?&gt;&gt; cls = List.class ฉันคิดบางอย่างเช่นนี้จะทำงานได้ แต่นี่เป็นเพียงข้อผิดพลาดทางไวยากรณ์ธรรมดา ol: Class&lt;List&lt;Foo&gt;&gt; cls = List&lt;Foo&gt;.class ฉันจะได้รับClass&lt;List&lt;Foo&gt;&gt;แบบคงที่ได้อย่างไรเช่นใช้ตัวอักษรของชั้นเรียน? ฉันสามารถใช้@SuppressWarnings("unchecked")เพื่อกำจัดคำเตือนที่เกิดจากการใช้ List แบบไม่มีพารามิเตอร์ในตัวอย่างแรกClass&lt;List&gt; cls = List.classแต่ฉันไม่ต้องการ ข้อเสนอแนะใด ๆ
194 java  generics  class  literals 

13
ประสิทธิภาพของอาร์เรย์กับรายการ
สมมติว่าคุณต้องมีรายการ / อาร์เรย์ของจำนวนเต็มที่คุณต้องวนซ้ำบ่อยๆและฉันหมายถึงบ่อยมาก เหตุผลอาจแตกต่างกัน แต่บอกว่ามันอยู่ในหัวใจของวงส่วนใหญ่ภายในของการประมวลผลปริมาณสูง โดยทั่วไปจะเลือกใช้รายการ (รายการ) เนื่องจากความยืดหยุ่นในขนาด ยิ่งกว่านั้นเอกสาร msdn ที่อ้างสิทธิ์ว่ารายการใช้อาร์เรย์ภายในและควรดำเนินการอย่างรวดเร็ว (ดูอย่างรวดเร็วด้วยตัวสะท้อนที่ยืนยันสิ่งนี้) ไม่ว่าจะมีค่าใช้จ่ายที่เกี่ยวข้อง ใครบ้างที่วัดสิ่งนี้จริงหรือ การวนซ้ำ 6M ครั้งในรายการใช้เวลาเดียวกับอาร์เรย์หรือไม่

5
<out T> vs <T> ใน Generics
อะไรคือความแตกต่างระหว่าง &lt;out T&gt;และ&lt;T&gt;คืออะไร? ตัวอย่างเช่น: public interface IExample&lt;out T&gt; { ... } เมื่อเทียบกับ public interface IExample&lt;T&gt; { ... }
189 c#  generics  covariance 


6
ผ่าน System.Type ที่สร้างอินสแตนซ์เป็นพารามิเตอร์ประเภทสำหรับคลาสทั่วไป
ชื่อนั้นค่อนข้างคลุมเครือ สิ่งที่ฉันอยากรู้คือถ้าเป็นไปได้: string typeName = &lt;read type name from somwhere&gt;; Type myType = Type.GetType(typeName); MyGenericClass&lt;myType&gt; myGenericClass = new MyGenericClass&lt;myType&gt;(); เห็นได้ชัดว่า MyGenericClass อธิบายไว้เป็น: public class MyGenericClass&lt;T&gt; ตอนนี้คอมไพเลอร์บ่นว่าไม่พบ 'ประเภทหรือเนมสเปซ' myType '"ต้องมีวิธีในการทำเช่นนี้
183 c#  .net  generics 

4
วิธีการทำให้วิธีการ Java Generic คงที่?
ต่อไปนี้เป็นตัวอย่างข้อมูลเกี่ยวกับวิธีสร้างคลาส Java ทั่วไปเพื่อผนวกรายการเดียวเข้ากับอาร์เรย์ ฉันจะทำให้ appendToArray เป็นวิธีคงที่ได้อย่างไร การเพิ่มสแตติกให้กับลายเซ็นเมธอดส่งผลให้เกิดข้อผิดพลาดในการรวบรวม public class ArrayUtils&lt;E&gt; { public E[] appendToArray(E[] array, E item) { E[] result = (E[])new Object[array.length+1]; result[array.length] = item; return result; } }
172 java  generics 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.