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

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

12
ฉันจะทราบได้อย่างไรว่าวัตถุแต่ละประเภทอยู่ใน ArrayList <Object>
ฉันมี ArrayList ซึ่งประกอบด้วยองค์ประกอบต่าง ๆ ที่นำเข้าจากฐานข้อมูลซึ่งประกอบด้วยสตริงตัวเลขคู่และ ints มีวิธีใช้เทคนิคประเภทการสะท้อนเพื่อค้นหาว่าข้อมูลแต่ละประเภทแต่ละองค์ประกอบเก็บข้อมูลอะไรบ้าง? FYI: สาเหตุที่มีข้อมูลหลายประเภทเนื่องจากเป็นส่วนหนึ่งของโค้ดจาวาที่เขียนขึ้นเพื่อนำไปใช้กับฐานข้อมูลที่แตกต่างกัน

3
ไวยากรณ์สำหรับตัวสร้างเริ่มต้นสำหรับคลาสทั่วไปคืออะไร?
ห้ามใน C # ใช้ตัวสร้างเริ่มต้นสำหรับคลาสทั่วไปหรือไม่? ถ้าไม่ทำไมโค้ดด้านล่างไม่คอมไพล์? (เมื่อฉันลบ&lt;T&gt;คอมไพล์ออก) วิธีที่ถูกต้องในการกำหนดคอนสตรัคเตอร์เริ่มต้นสำหรับคลาสทั่วไปคืออะไร? public class Cell&lt;T&gt; { public Cell&lt;T&gt;() { } } ข้อผิดพลาดเวลาคอมไพล์ : ข้อผิดพลาด 1 โทเค็นไม่ถูกต้อง '(' ในการประกาศสมาชิกคลาสโครงสร้างหรืออินเทอร์เฟซ
86 c#  .net  generics 

14
ใน C # ทำไมไม่สามารถเก็บวัตถุ List <string> ในตัวแปร List <object> ได้
ดูเหมือนว่าวัตถุ List ไม่สามารถเก็บไว้ในตัวแปร List ใน C # และไม่สามารถแคสต์อย่างชัดเจนด้วยวิธีนั้นได้ List&lt;string&gt; sl = new List&lt;string&gt;(); List&lt;object&gt; ol; ol = sl; ผลลัพธ์ในไม่สามารถแปลงประเภทโดยปริยายSystem.Collections.Generic.List&lt;string&gt;เป็นSystem.Collections.Generic.List&lt;object&gt; แล้ว ... List&lt;string&gt; sl = new List&lt;string&gt;(); List&lt;object&gt; ol; ol = (List&lt;object&gt;)sl; ผลลัพธ์ในไม่สามารถแปลงประเภทSystem.Collections.Generic.List&lt;string&gt;เป็นSystem.Collections.Generic.List&lt;object&gt; แน่นอนคุณสามารถทำได้โดยดึงทุกอย่างออกจากรายการสตริงและใส่กลับเข้าไปทีละรายการ แต่เป็นวิธีแก้ปัญหาที่ค่อนข้างซับซ้อน

2
การสร้างอินสแตนซ์ประเภท <T> ทั่วไปด้วยตัวแปรที่มี Type
เป็นไปได้ไหมที่จะบรรลุรหัสต่อไปนี้? ฉันรู้ว่ามันไม่ได้ผล แต่ฉันสงสัยว่ามีวิธีแก้ปัญหาหรือไม่? Type k = typeof(double); List&lt;k&gt; lst = new List&lt;k&gt;();
85 c#  generics  types  instance 

3
คุณลักษณะเฉพาะของการอนุมานประเภทข้อยกเว้นใน Java 8
ในขณะที่เขียนโค้ดสำหรับคำตอบอื่นบนไซต์นี้ฉันพบลักษณะเฉพาะนี้: static void testSneaky() { final Exception e = new Exception(); sneakyThrow(e); //no problems here nonSneakyThrow(e); //ERRROR: Unhandled exception: java.lang.Exception } @SuppressWarnings("unchecked") static &lt;T extends Throwable&gt; void sneakyThrow(Throwable t) throws T { throw (T) t; } static &lt;T extends Throwable&gt; void nonSneakyThrow(T t) throws T { throw t; } อย่างแรกฉันค่อนข้างสับสนว่าทำไมการsneakyThrowโทรถึงคอมไพเลอร์จึงทำได้ …

7
.NET มี EventArgs <T> ในตัวหรือไม่
ฉันพร้อมที่จะสร้างคลาส EventArgs ทั่วไปสำหรับอาร์กิวเมนต์เหตุการณ์ที่มีอาร์กิวเมนต์เดียว: public class EventArg&lt;T&gt; : EventArgs { // Property variable private readonly T p_EventData; // Constructor public EventArg(T data) { p_EventData = data; } // Property for EventArgs argument public T Data { get { return p_EventData; } } } ก่อนที่ฉันจะทำเช่นนั้น C # มีคุณสมบัติเดียวกันในภาษาหรือไม่ ฉันจำได้ว่าเคยเจออะไรแบบนั้นตอนที่ C # 2.0 …
85 c#  generics  eventargs 

10
วิธีที่ "เหมาะสม" ในการส่ง Hibernate Query.list () ไปยัง List <Type> คืออะไร?
ฉันเป็นมือใหม่ที่ใช้ Hibernate และฉันกำลังเขียนวิธีง่ายๆในการส่งคืนรายการวัตถุที่ตรงกับตัวกรองเฉพาะ List&lt;Foo&gt;ดูเหมือนเป็นประเภทผลตอบแทนตามธรรมชาติ สิ่งที่ผมทำผมไม่สามารถดูเหมือนจะทำให้มีความสุขคอมไพเลอร์, @SuppressWarningsถ้าฉันจ้างน่าเกลียด import java.util.List; import org.hibernate.Query; import org.hibernate.Session; public class Foo { public Session acquireSession() { // All DB opening, connection etc. removed, // since the problem is in compilation, not at runtime. return null; } @SuppressWarnings("unchecked") /* &lt;----- */ public List&lt;Foo&gt; activeObjects() { Session s …

4
ทำไมแลมบ์ดาส่งคืนชนิดไม่ตรวจสอบในเวลารวบรวม?
Integerอ้างอิงวิธีการที่ใช้มีชนิดกลับ แต่ไม่สามารถใช้ร่วมกันStringได้ในตัวอย่างต่อไปนี้ วิธีแก้ไขการwithประกาศวิธีการเพื่อให้ได้รับการอ้างอิงประเภทวิธีการที่ปลอดภัยโดยไม่ต้องหล่อด้วยตนเอง? import java.util.function.Function; public class MinimalExample { static public class Builder&lt;T&gt; { final Class&lt;T&gt; clazz; Builder(Class&lt;T&gt; clazz) { this.clazz = clazz; } static &lt;T&gt; Builder&lt;T&gt; of(Class&lt;T&gt; clazz) { return new Builder&lt;T&gt;(clazz); } &lt;R&gt; Builder&lt;T&gt; with(Function&lt;T, R&gt; getter, R returnValue) { return null; //TODO } } static public interface …

4
ความแตกต่างระหว่าง <คืออะไร ขยายฐาน> และ <T ขยายฐาน>?
ในตัวอย่างนี้: import java.util.*; public class Example { static void doesntCompile(Map&lt;Integer, List&lt;? extends Number&gt;&gt; map) {} static &lt;T extends Number&gt; void compiles(Map&lt;Integer, List&lt;T&gt;&gt; map) {} static void function(List&lt;? extends Number&gt; outer) { doesntCompile(new HashMap&lt;Integer, List&lt;Integer&gt;&gt;()); compiles(new HashMap&lt;Integer, List&lt;Integer&gt;&gt;()); } } doesntCompile() ไม่สามารถคอมไพล์ด้วย: Example.java:9: error: incompatible types: HashMap&lt;Integer,List&lt;Integer&gt;&gt; cannot be converted to …

5
วิธีจับตัวแปรทั้งหมดของข้อยกเว้นทั่วไปใน C #
ฉันต้องการที่จะตรวจจับตัวแปรทั้งหมดของคลาสข้อยกเว้นทั่วไปและฉันสงสัยว่ามีวิธีที่จะทำโดยไม่มีบล็อก catch ที่หลากหลายหรือไม่ ตัวอย่างเช่นฉันมีคลาสยกเว้น: public class MyException&lt;T&gt; : Exception { public string MyProperty { get; } public MyException(T prop) : base(prop.ToString()) { MyProperty = prop?.ToString(); } } และสองคลาสที่ได้รับ: public class MyDerivedStringException : MyException&lt;string&gt; { public MyDerivedStringException(string prop) : base(prop) { } } public class MyDerivedIntException : MyException&lt;int&gt; { public MyDerivedIntException(int …
22 c#  generics  exception 

1
เหตุใดพารามิเตอร์ประเภทจึงแข็งแรงกว่าจึงเป็นพารามิเตอร์วิธี
ทำไม public &lt;R, F extends Function&lt;T, R&gt;&gt; Builder&lt;T&gt; withX(F getter, R returnValue) {...} เข้มงวดมากขึ้นแล้ว public &lt;R&gt; Builder&lt;T&gt; with(Function&lt;T, R&gt; getter, R returnValue) {...} นี่คือการติดตามขึ้นไปบนทำไมแลมบ์ดาชนิดกลับไม่ได้ตรวจสอบที่รวบรวมเวลา ฉันพบว่าใช้วิธีการwithX()เช่น .withX(MyInterface::getLength, "I am not a Long") สร้างข้อผิดพลาดเวลารวบรวมที่ต้องการ: ประเภทของ getLength () จากประเภท BuilderExample.MyInterface มีความยาวไม่สามารถใช้ร่วมกับชนิดส่งคืนของ descriptor: String ในขณะที่ใช้วิธีการwith()ไม่ได้ ตัวอย่างเต็มรูปแบบ: import java.util.function.Function; public class SO58376589 { public static …

3
การเลือกลายเซ็นของเมธอดสำหรับแลมบ์ดานิพจน์ที่มีเป้าหมายหลายประเภท
ฉันตอบคำถามและพบเจอสถานการณ์ที่ไม่สามารถอธิบายได้ พิจารณารหัสนี้: interface ConsumerOne&lt;T&gt; { void accept(T a); } interface CustomIterable&lt;T&gt; extends Iterable&lt;T&gt; { void forEach(ConsumerOne&lt;? super T&gt; c); //overload } class A { private static CustomIterable&lt;A&gt; iterable; private static List&lt;A&gt; aList; public static void main(String[] args) { iterable.forEach(a -&gt; aList.add(a)); //ambiguous iterable.forEach(aList::add); //ambiguous iterable.forEach((A a) -&gt; aList.add(a)); //OK } …
11 java  generics  lambda  javac  ecj 

1
ทำไมคอมไพเลอร์เลือกวิธีการทั่วไปนี้ด้วยพารามิเตอร์ประเภทคลาสเมื่อเรียกใช้ด้วยประเภทอินเตอร์เฟสที่ไม่เกี่ยวข้อง?
พิจารณาสองคลาสและอินเทอร์เฟซต่อไปนี้: public class Class1 {} public class Class2 {} public interface Interface1 {} ทำไมการเรียกครั้งที่สองเพื่อmandatoryเรียกใช้เมธอดโอเวอร์โหลดด้วยClass2ถ้าgetInterface1และInterface1ไม่มีความสัมพันธ์กับClass2? public class Test { public static void main(String[] args) { Class1 class1 = getClass1(); Interface1 interface1 = getInterface1(); mandatory(getClass1()); // prints "T is not class2" mandatory(getInterface1()); // prints "T is class2" mandatory(class1); // prints "T is …

1
การอ้างอิงเมธอดและ Generics ใน Java-8
ฉันกำลังประสบปัญหากับการอ้างอิงวิธีการรวมกับประเภททั่วไป เรามีรหัสที่เราต้องเรียกใช้วิธีการโอเวอร์โหลด แต่มันล้มเหลวด้วยข้อผิดพลาด: ไม่สามารถแก้ไขค่า m1 () ฉันทำให้ปัญหาของฉันง่ายขึ้นเพื่อทำให้ชัดเจนว่าปัญหาอยู่ที่ใด รหัสต่อไปนี้ล้มเหลว: public class Test { void test() { // Getting error here setValue(C1::m1, Integer.ONE); } &lt;E extends I1, T&gt; void setValue(BiConsumer&lt;E, T&gt; cons, T value) { } } interface I1 { } class C1 implements I1 { void m1(Integer value) { } void …
11 java  generics  lambda  java-8 

4
ปัญหาเกี่ยวกับคุณสมบัติทั่วไปเมื่อการแมปประเภท
ฉันมีห้องสมุดที่ส่งออกประเภทยูทิลิตี้คล้ายกับต่อไปนี้ type Action&lt;Model extends object&gt; = (data: State&lt;Model&gt;) =&gt; State&lt;Model&gt;; ยูทิลิตี้ประเภทนี้ช่วยให้คุณสามารถประกาศฟังก์ชั่นที่จะทำงานเป็น "การกระทำ" มันได้รับการโต้แย้งทั่วไปModelว่าเป็นการกระทำที่จะต่อต้าน dataอาร์กิวเมนต์ของ "การกระทำ" พิมพ์แล้วกับประเภทสาธารณูปโภคที่ฉันส่งออก type State&lt;Model extends object&gt; = Omit&lt;Model, KeysOfType&lt;Model, Action&lt;any&gt;&gt;&gt;; Stateประเภทยูทิลิตี้โดยทั่วไปจะใช้เวลาเข้าModelทั่วไปและแล้วสร้างรูปแบบใหม่ที่คุณสมบัติทั้งหมดที่เป็นประเภทActionได้ถูกลบออก ตัวอย่างเช่นที่นี่เป็นการใช้พื้นที่ของผู้ใช้ขั้นพื้นฐานข้างต้น interface MyModel { counter: number; increment: Action&lt;Model&gt;; } const myModel = { counter: 0, increment: (data) =&gt; { data.counter; // Exists and typed as …

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