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

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

10
รายการทั่วไป - ย้ายรายการภายในรายการ
ดังนั้นฉันมีรายการทั่วไปและoldIndexและnewIndexค่า ฉันต้องการย้ายรายการoldIndexไปที่newIndex... อย่างง่ายดายที่สุด ข้อเสนอแนะใด ๆ บันทึก รายการควรจะสิ้นสุดระหว่างรายการที่(newIndex - 1)และnewIndex ก่อนที่จะถูกลบออก
155 c#  .net  generics  list 

5
ปัญหาประเภท Nullable กับ?: ผู้ประกอบการตามเงื่อนไข
มีคนอธิบายได้ไหมว่าทำไมสิ่งนี้ถึงใช้งานได้ใน C # .NET 2.0: Nullable<DateTime> foo; if (true) foo = null; else foo = new DateTime(0); ... แต่นี่ไม่ใช่: Nullable<DateTime> foo; foo = true ? null : new DateTime(0); แบบฟอร์มหลังทำให้ฉันมีข้อผิดพลาดในการคอมไพล์ "ไม่สามารถระบุชนิดของนิพจน์เงื่อนไขได้เนื่องจากไม่มีการแปลงโดยนัยระหว่าง '<null>' และ 'System.DateTime' ไม่ใช่ว่าฉันไม่สามารถใช้รูปแบบเดิมได้ แต่รูปแบบที่สองนั้นสอดคล้องกับส่วนที่เหลือของรหัสของฉันมากกว่า

7
ฉันจะเพิ่มในรายการ <ได้อย่างไร ขยายหมายเลข> โครงสร้างข้อมูลหรือไม่
ฉันมีรายการที่มีการประกาศเช่นนี้: List&lt;? extends Number&gt; foo3 = new ArrayList&lt;Integer&gt;(); ฉันพยายามเพิ่ม 3 ลงใน foo3 อย่างไรก็ตามฉันได้รับข้อความแสดงข้อผิดพลาดเช่นนี้: The method add(capture#1-of ? extends Number) in the type List&lt;capture#1-of ? extends Number&gt; is not applicable for the arguments (ExtendsNumber)
154 java  generics 

13
อะไรคือความแตกต่างระหว่างชนิด“ ทั่วไป” ใน C ++ และ Java
Java มี generics และ C ++ ให้รูปแบบการเขียนโปรแกรมที่แข็งแกร่งมากกับtemplates ดังนั้นอะไรคือความแตกต่างระหว่าง C ++ และ Java generics?

8
เป็นไปได้หรือไม่ที่จะแก้ปัญหา“ คำสั่งคอมไพเลอร์ทั่วไปของ T ถูกสร้างขึ้นสำหรับพารามิเตอร์ varargs”?
นี่เป็นเวอร์ชันที่ง่ายของโค้ดที่เป็นปัญหาคลาสทั่วไปหนึ่งคลาสใช้คลาสอื่นที่มีพารามิเตอร์ชนิดทั่วไปและต้องการส่งหนึ่งประเภททั่วไปไปยังวิธีที่มีพารามิเตอร์ varargs: class Assembler&lt;X, Y&gt; { void assemble(X container, Y... args) { ... } } class Component&lt;T&gt; { void useAssembler(T something) { Assembler&lt;String, T&gt; assembler = new Assembler&lt;String, T&gt;(); //generates warning: // Type safety : A generic array of T is // created for a varargs parameter assembler.assemble("hello", something); } …
153 java  generics 

3
C # - ประเภททั่วไปหลายรายการในหนึ่งรายการ
อาจเป็นไปไม่ได้ แต่ฉันมีชั้นนี้: public class Metadata&lt;DataType&gt; where DataType : struct { private DataType mDataType; } มีมากกว่านั้น แต่ขอให้เรียบง่าย ประเภททั่วไป (DataType) ถูก จำกัด ประเภทค่าโดยคำสั่งที่ สิ่งที่ฉันต้องการจะทำคือมีรายการของวัตถุ Metadata ประเภทต่าง ๆ (DataType) เช่น: List&lt;Metadata&gt; metadataObjects; metadataObjects.Add(new Metadata&lt;int&gt;()); metadataObjects.Add(new Metadata&lt;bool&gt;()); metadataObjects.Add(new Metadata&lt;double&gt;()); เป็นไปได้ไหม
153 c#  generics 

7
นิยาม Java Enum
ฉันคิดว่าฉันเข้าใจ Java generics ค่อนข้างดี แต่แล้วฉันก็พบสิ่งต่อไปนี้ใน java.lang.Enum: class Enum&lt;E extends Enum&lt;E&gt;&gt; มีคนอธิบายวิธีตีความพารามิเตอร์ประเภทนี้ได้ไหม คะแนนโบนัสสำหรับการให้ตัวอย่างอื่น ๆ ที่สามารถใช้พารามิเตอร์ประเภทที่คล้ายคลึงกันได้
151 java  generics  enums  crtp 

3
Java Map ที่เทียบเท่าใน C #
ฉันพยายามเก็บรายการไว้ในคอลเลคชั่นด้วยกุญแจที่ฉันเลือก ใน Java ฉันจะใช้ Map ดังนี้: class Test { Map&lt;Integer,String&gt; entities; public String getEntity(Integer code) { return this.entities.get(code); } } มีวิธีที่เท่าเทียมกันในการทำเช่นนี้ใน C # หรือไม่? System.Collections.Generic.Hashsetไม่ใช้แฮชและฉันไม่สามารถกำหนดคีย์ประเภทที่กำหนดเอง System.Collections.Hashtableไม่ใช่คลาสทั่วไป System.Collections.Generic.Dictionaryไม่มีget(Key)วิธีการ
150 c#  java  generics  collections 

7
ทำไม Java enum ตัวอักษรไม่สามารถมีพารามิเตอร์ประเภททั่วไปได้?
Java enums ยอดเยี่ยม ดังนั้นยาชื่อสามัญ แน่นอนว่าเราทุกคนรู้ถึงข้อ จำกัด ของอันหลังเนื่องจากการลบประเภท แต่มีสิ่งหนึ่งที่ฉันไม่เข้าใจว่าทำไมฉันไม่สามารถสร้าง enum เช่นนี้: public enum MyEnum&lt;T&gt; { LITERAL1&lt;String&gt;, LITERAL2&lt;Integer&gt;, LITERAL3&lt;Object&gt;; } พารามิเตอร์ประเภททั่วไป&lt;T&gt;ในทางกลับกันนั้นจะมีประโยชน์ในสถานที่ต่าง ๆ ลองนึกภาพพารามิเตอร์ประเภททั่วไปกับวิธีการ: public &lt;T&gt; T getValue(MyEnum&lt;T&gt; param); หรือแม้แต่ในชั้นเรียน Enum เอง: public T convert(Object o); ตัวอย่างที่ชัดเจนยิ่งขึ้น # 1 เนื่องจากตัวอย่างด้านบนอาจดูเป็นนามธรรมเกินไปสำหรับบางคนนี่เป็นตัวอย่างในชีวิตจริงมากขึ้นว่าทำไมฉันถึงต้องการทำสิ่งนี้ ในตัวอย่างนี้ฉันต้องการใช้ Enums เพราะจากนั้นฉันสามารถระบุชุดของคีย์คุณสมบัติที่ จำกัด ได้ ยาสามัญเพราะฉันสามารถมีความปลอดภัยประเภทระดับวิธีการสำหรับการจัดเก็บคุณสมบัติ public interface MyProperties { public &lt;T&gt; void …
148 java  generics  enums 

4
เพราะเหตุใดตัวอย่างจึงไม่ได้รับการรวบรวมความแปรปรวน (ร่วมต้านและและ) จึงทำงานได้อย่างไร
การติดตามจากคำถามนี้มีใครช่วยอธิบายสิ่งต่อไปนี้ในสกาลา: class Slot[+T] (var some: T) { // DOES NOT COMPILE // "COVARIANT parameter in CONTRAVARIANT position" } ฉันเข้าใจความแตกต่างระหว่าง+TและTในการประกาศประเภท (มันรวบรวมถ้าฉันใช้T) แต่แล้วเราจะเขียนคลาสที่ covariant ในพารามิเตอร์ประเภทของมันโดยไม่ต้องใช้วิธีการสร้างสิ่งที่ไม่มีใครเทียบได้อย่างไร ฉันสามารถมั่นใจได้ว่าต่อไปนี้เท่านั้นที่สามารถสร้างขึ้นด้วยตัวอย่างของT? class Slot[+T] (var some: Object){ def get() = { some.asInstanceOf[T] } } แก้ไข - ตอนนี้ลงไปที่ต่อไปนี้: abstract class _Slot[+T, V &lt;: T] (var some: V) { def …

9
อะไรคือความแตกต่างระหว่าง <? super E> และ <? ขยาย E> หรือไม่
ความแตกต่างระหว่าง&lt;? super E&gt;และ&lt;? extends E&gt;คืออะไร? ตัวอย่างเช่นเมื่อคุณดูคลาสjava.util.concurrent.LinkedBlockingQueueมีลายเซ็นต่อไปนี้สำหรับตัวสร้าง: public LinkedBlockingQueue(Collection&lt;? extends E&gt; c) และหนึ่งสำหรับวิธีการ: public int drainTo(Collection&lt;? super E&gt; c)
147 java  generics 

12
Jackson - Deserialize โดยใช้คลาสทั่วไป
ฉันมีสตริง json ซึ่งฉันควร deSerialize ในชั้นเรียนต่อไปนี้ class Data &lt;T&gt; { int found; Class&lt;T&gt; hits } ฉันต้องทำอย่างไร? นี่เป็นวิธีปกติ mapper.readValue(jsonString, Data.class); แต่ฉันจะพูดถึงสิ่งที่ T หมายถึงได้อย่างไร
147 java  json  generics  jackson 

5
วิธีการส่งชนิดคลาสเป็นพารามิเตอร์ฟังก์ชัน
ฉันมีฟังก์ชั่นทั่วไปที่เรียกใช้บริการเว็บและทำให้การตอบสนอง JSON กลับเป็นวัตถุ class func invokeService&lt;T&gt;(service: String, withParams params: Dictionary&lt;String, String&gt;, returningClass: AnyClass, completionHandler handler: ((T) -&gt; ())) { /* Construct the URL, call the service and parse the response */ } สิ่งที่ฉันพยายามทำให้สำเร็จคือโค้ด Java ที่เทียบเท่ากัน public &lt;T&gt; T invokeService(final String serviceURLSuffix, final Map&lt;String, String&gt; params, final Class&lt;T&gt; classTypeToReturn) { } …

5
ทำไม Java ไม่อนุญาตให้มีคลาสย่อยทั่วไปของ Throwable
ตามการแยกภาษา Javaรุ่นที่ 3: มันเป็นข้อผิดพลาดเวลารวบรวมถ้าระดับทั่วไปเป็น subclass Throwableโดยตรงหรือโดยอ้อมของ ฉันต้องการเข้าใจว่าทำไมการตัดสินใจครั้งนี้จึงเกิดขึ้น เกิดอะไรขึ้นกับข้อยกเว้นทั่วไป (เท่าที่ฉันรู้ generics เป็นเพียงการรวบรวมเวลา syntactic น้ำตาลและพวกเขาจะถูกแปลเป็นObjectอย่างไรก็ตามใน.classไฟล์ดังนั้นการประกาศคลาสทั่วไปอย่างมีประสิทธิภาพราวกับว่าทุกอย่างในนั้นเป็นObjectโปรดแก้ไขให้ฉันถ้าฉันผิด .)

6
ไม่สามารถแปลงค่าประเภท 'T'
เป็นไปได้ว่าคำถามนี้จะเป็นเรื่องเริ่มต้น แต่ Google ก็ไม่ได้ให้คำตอบที่น่าประหลาดใจ ฉันมีวิธีประดิษฐ์นี้ค่อนข้าง T HowToCast&lt;T&gt;(T t) { if (typeof(T) == typeof(string)) { T newT1 = "some text"; T newT2 = (string)t; } return t; } มาจากพื้นหลัง C ++ ฉันคาดว่าสิ่งนี้จะทำงาน อย่างไรก็ตามมันไม่สามารถคอมไพล์ด้วย "ไม่สามารถแปลงชนิด 'T' เป็นสตริง" และ "ไม่สามารถแปลงชนิด 'T' เป็นสตริง" สำหรับการมอบหมายทั้งสองอย่างข้างต้น ฉันกำลังทำอะไรบางอย่างผิดพลาดทางแนวคิดหรือเพิ่งมีไวยากรณ์ผิด โปรดช่วยฉันเรียงลำดับออก ขอบคุณ!
146 c#  .net  generics  casting 

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