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

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

3
Jackson และการอ้างอิงประเภททั่วไป
ฉันต้องการใช้ไลบรารี jackson json สำหรับวิธีการทั่วไปดังนี้: public MyRequest<T> tester() { TypeReference<MyWrapper<T>> typeRef = new TypeReference<MyWrapper<T>>(); MyWrapper<T> requestWrapper = (MyWrapper<T>) JsonConverter.fromJson(jsonRequest, typeRef); return requestWrapper.getRequest(); } ... public class MyWrapper<T> { private MyRequest<T> request; public MyRequest<T> getRequest() { return request; } public void setRequest(MyRequest<T> request) { this.request = request; } } public class MyRequest{ …
107 java  json  generics  jackson 

2
ความแตกต่างระหว่าง“ *” และ“ Any” ใน Kotlin generics
ผมไม่แน่ใจว่าผมเข้าใจความแตกต่างระหว่างและSomeGeneric<*> SomeGeneric<Any>ฉันคิดว่า*แสดงถึงอะไรก็ได้ (สัญลักษณ์แทน) และAnyแสดงถึงวัตถุที่วัตถุทั้งหมดสืบทอดมา ดูเหมือนว่าพวกเขาควรจะเหมือนกัน แต่พวกเขา?
107 generics  kotlin 

9
ฉันจะอ่านแอตทริบิวต์บนคลาสที่รันไทม์ได้อย่างไร
ฉันกำลังพยายามสร้างวิธีการทั่วไปที่จะอ่านแอตทริบิวต์ในคลาสและส่งคืนค่านั้นที่รันไทม์ ฉันจะทำอย่างไร หมายเหตุ: แอตทริบิวต์ DomainName เป็นของคลาส DomainNameAttribute [DomainName("MyTable")] Public class MyClass : DomainBase {} สิ่งที่ฉันพยายามสร้าง: //This should return "MyTable" String DomainNameValue = GetDomainName<MyClass>();

8
การเรียกใช้วิธีการแบบคงที่บนพารามิเตอร์ประเภททั่วไป
ฉันหวังว่าจะทำอะไรแบบนี้ แต่ดูเหมือนว่าจะผิดกฎหมายใน C #: public Collection MethodThatFetchesSomething<T>() where T : SomeBaseClass { return T.StaticMethodOnSomeBaseClassThatReturnsCollection(); } ฉันได้รับข้อผิดพลาดเวลาคอมไพล์: "'T' คือ 'พารามิเตอร์ประเภท' ซึ่งไม่ถูกต้องในบริบทที่กำหนด" ด้วยพารามิเตอร์ประเภททั่วไปฉันจะเรียกเมธอดแบบคงที่ในคลาสทั่วไปได้อย่างไร ต้องมีวิธีการคงที่ตามข้อ จำกัด
107 c#  generics 

11
ข้อยกเว้นที่ดีที่สุดสำหรับอาร์กิวเมนต์ประเภททั่วไปที่ไม่ถูกต้อง
ฉันกำลังเขียนโค้ดสำหรับUnconstrainedMelodyซึ่งมีวิธีการทั่วไปที่จะทำกับ enums ตอนนี้ฉันมีระดับคงที่กับพวงของวิธีการซึ่งเป็นผู้เดียวที่มีความหมายที่จะใช้กับ "ธง" enums ฉันไม่สามารถเพิ่มสิ่งนี้เป็นข้อ จำกัด ได้ ... ดังนั้นจึงเป็นไปได้ว่าพวกมันจะถูกเรียกด้วย enum ประเภทอื่นด้วย ในกรณีนี้ฉันต้องการยกเว้น แต่ฉันไม่แน่ใจว่าจะโยนอันไหนดี เพื่อให้เป็นรูปธรรมถ้าฉันมีสิ่งนี้: // Returns a value with all bits set by any values public static T GetBitMask<T>() where T : struct, IEnumConstraint { if (!IsFlags<T>()) // This method doesn't throw { throw new ??? } // Normal …
106 c#  generics  exception 

13
รับประเภท T จาก IEnumerable <T>
มีวิธีดึงข้อมูลประเภทTจากการIEnumerable&lt;T&gt;สะท้อนหรือไม่? เช่น ฉันมีIEnumerable&lt;Child&gt;ข้อมูลตัวแปร ฉันต้องการดึงข้อมูลประเภทของเด็กผ่านการไตร่ตรอง
106 c#  generics  reflection 

1
เรียกวิธีการทั่วไปแบบคงที่
ฉันเจอสถานการณ์ที่น่าสงสัยเกี่ยวกับวิธีการทั่วไปแบบคงที่ นี่คือรหัส: class Foo&lt;E&gt; { public static &lt;E&gt; Foo&lt;E&gt; createFoo() { // ... } } class Bar&lt;E&gt; { private Foo&lt;E&gt; member; public Bar() { member = Foo.createFoo(); } } ทำไมฉันไม่ต้องระบุอาร์กิวเมนต์ประเภทใด ๆ ในนิพจน์Foo.createFoo()? นี่เป็นการอนุมานประเภทหนึ่งหรือไม่? ถ้าฉันต้องการให้ชัดเจนเกี่ยวกับเรื่องนี้ฉันจะระบุประเภทอาร์กิวเมนต์ได้อย่างไร

5
โปรโตคอลสามารถใช้เป็นข้อ จำกัด ทั่วไปเท่านั้นเนื่องจากมีข้อกำหนดในตัวเองหรือประเภทที่เกี่ยวข้อง
ฉันมีโปรโตคอล RequestType และมี AssociatedType Model ดังต่อไปนี้ public protocol RequestType: class { associatedtype Model var path: String { get set } } public extension RequestType { public func executeRequest(completionHandler: Result&lt;Model, NSError&gt; -&gt; Void) { request.response(rootKeyPath: rootKeyPath) { [weak self] (response: Response&lt;Model, NSError&gt;) -&gt; Void in completionHandler(response.result) guard let weakSelf = self …

15
จะหลีกเลี่ยงคำเตือนด้านความปลอดภัยประเภท Hibernate HQL ได้อย่างไร
ตัวอย่างเช่นฉันมีคำถามดังกล่าว: Query q = sess.createQuery("from Cat cat"); List cats = q.list(); หากฉันพยายามทำสิ่งนี้จะแสดงคำเตือนต่อไปนี้ Type safety: The expression of type List needs unchecked conversion to conform to List&lt;Cat&gt; List&lt;Cat&gt; cats = q.list(); มีวิธีหลีกเลี่ยงหรือไม่?
105 java  generics 

6
SortedList <>, SortedDictionary <> และพจนานุกรม <>
ฉันพบSortedList&lt;TKey, TValue&gt; SortedDictionary&lt;TKey, TValue&gt;และDictionary&lt;TKey, TValue&gt;ใช้อินเทอร์เฟซเดียวกัน เมื่อไหร่ที่เราควรเลือกSortedListและทำSortedDictionaryซ้ำDictionary? อะไรคือความแตกต่างระหว่างSortedListและSortedDictionaryในแง่ของการใช้งาน?

13
เหตุใดฉันจึงต้องสนใจว่า Java ไม่ได้มีการ reified generics
สิ่งนี้เกิดขึ้นเป็นคำถามที่ฉันถามในการสัมภาษณ์เมื่อเร็ว ๆ นี้เนื่องจากมีบางสิ่งที่ผู้สมัครต้องการเห็นเพิ่มเข้าไปในภาษา Java โดยทั่วไปมักถูกระบุว่าเป็นความเจ็บปวดที่ Java ไม่ได้ทำให้เกิดชื่อสามัญแต่เมื่อถูกผลักดันผู้สมัครไม่สามารถบอกฉันได้ว่าสิ่งต่างๆที่เขาสามารถทำได้คือสิ่งเหล่านี้ เห็นได้ชัดว่าเนื่องจากชนิดดิบเป็นสิ่งที่อนุญาตใน Java (และการตรวจสอบที่ไม่ปลอดภัย) จึงเป็นไปได้ที่จะล้มล้าง generics และลงเอยด้วยสิ่งList&lt;Integer&gt;นั้น (ตัวอย่าง) มีStrings อยู่จริง สิ่งนี้ชัดเจนว่าเป็นไปไม่ได้คือข้อมูลประเภท reified; แต่ต้องมีมากกว่านี้ ! ผู้คนสามารถโพสต์ตัวอย่างของสิ่งที่พวกเขาอยากทำจริงๆได้หรือไม่มี reified generics ฉันหมายถึงเห็นได้ชัดว่าคุณสามารถหาประเภทของ a Listat runtime ได้ แต่คุณจะทำอย่างไรกับมัน? public &lt;T&gt; void foo(List&lt;T&gt; l) { if (l.getGenericType() == Integer.class) { //yeah baby! err, what now? แก้ไข : การอัปเดตอย่างรวดเร็วสำหรับสิ่งนี้เนื่องจากคำตอบดูเหมือนส่วนใหญ่จะเกี่ยวข้องกับความจำเป็นในการส่งClassเป็นพารามิเตอร์ (ตัวอย่างEnumSet.noneOf(TimeUnit.class)) ฉันถูกมองมากขึ้นสำหรับบางสิ่งบางอย่างตามสายของที่นี้ก็เป็นไปไม่ได้ …

9
ไม่สามารถสร้างอาร์เรย์ของ LinkedLists ใน Java …?
ฉันกำลังทำงานกับคลาสเมทริกซ์แบบกระจัดกระจายที่ต้องการใช้อาร์เรย์LinkedListเพื่อเก็บค่าของเมทริกซ์ แต่ละองค์ประกอบของอาร์เรย์ (เช่นแต่ละรายการLinkedList) แทนแถวของเมทริกซ์ และแต่ละองค์ประกอบในLinkedListอาร์เรย์แสดงถึงคอลัมน์และค่าที่เก็บไว้ ในชั้นเรียนของฉันฉันมีการประกาศอาร์เรย์เป็น: private LinkedList&lt;IntegerNode&gt;[] myMatrix; และในตัวสร้างของฉันสำหรับSparseMatrixฉันพยายามกำหนด: myMatrix = new LinkedList&lt;IntegerNode&gt;[numRows]; ข้อผิดพลาดที่ฉันได้รับคือ ไม่สามารถสร้างอาร์เรย์ทั่วไปของLinkedList&lt;IntegerNode&gt;. ดังนั้นฉันมีสองประเด็นเกี่ยวกับสิ่งนี้: ฉันทำอะไรผิดและ เหตุใดประเภทจึงเป็นที่ยอมรับในการประกาศสำหรับอาร์เรย์หากไม่สามารถสร้างได้ IntegerNodeเป็นคลาสที่ฉันสร้างขึ้น และไฟล์คลาสทั้งหมดของฉันรวมอยู่ด้วยกัน
102 java  arrays  generics 

4
ความช่วยเหลือเกี่ยวกับข้อผิดพลาดทั่วไปของ C # - "ประเภท" T "ต้องเป็นประเภทค่าที่ไม่เป็นค่าว่างได้"
ฉันเพิ่งเริ่มใช้ C # และไม่เข้าใจว่าทำไมโค้ดต่อไปนี้ใช้ไม่ได้ public static Nullable&lt;T&gt; CoalesceMax&lt;T&gt;(Nullable&lt;T&gt; a, Nullable&lt;T&gt; b) where T : IComparable { if (a.HasValue &amp;&amp; b.HasValue) return a.Value.CompareTo(b.Value) &lt; 0 ? b : a; else if (a.HasValue) return a; else return b; } // Sample usage: public DateTime? CalculateDate(DataRow row) { DateTime? result = null; if …
100 c#  generics 


8
ใน C # วิธีการสร้างอินสแตนซ์ประเภททั่วไปที่ส่งผ่านภายในวิธีการ?
ฉันจะสร้างอินสแตนซ์ประเภท T ภายในInstantiateType&lt;T&gt;วิธีการด้านล่างได้อย่างไร ฉันได้รับข้อผิดพลาด: 'T' เป็น 'พารามิเตอร์ประเภท' แต่ใช้เหมือน 'ตัวแปร' : (เลื่อนลงสำหรับคำตอบที่อ้างอิง) using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace TestGeneric33 { class Program { static void Main(string[] args) { Container container = new Container(); Console.WriteLine(container.InstantiateType&lt;Customer&gt;("Jim", "Smith")); Console.WriteLine(container.InstantiateType&lt;Employee&gt;("Joe", "Thompson")); Console.ReadLine(); } } public class Container { public T InstantiateType&lt;T&gt;(string firstName, …
100 c#  generics 

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