คำถามติดแท็ก type-inference

การอนุมานประเภทเป็นกระบวนการของการอนุมานประเภทสำหรับโปรแกรมโดยอัตโนมัติโดยใช้กฎที่กำหนดโดยระบบประเภท

1
เหตุใดพารามิเตอร์ประเภทจึงแข็งแรงกว่าจึงเป็นพารามิเตอร์วิธี
ทำไม public <R, F extends Function<T, R>> Builder<T> withX(F getter, R returnValue) {...} เข้มงวดมากขึ้นแล้ว public <R> Builder<T> with(Function<T, R> 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 …

1
ความแตกต่างระหว่างการอนุมานประเภทของเมธอดและพารามิเตอร์ประเภทคลาสในการจับคู่รูปแบบ
ทำไมการจับคู่รูปแบบทำงานแตกต่างกันเมื่อพารามิเตอร์ชนิดมาจากวิธีการปิดล้อมซึ่งตรงข้ามกับคลาสที่ล้อมรอบ ตัวอย่างเช่น, trait Base[T] case class Derived(v: Int) extends Base[Int] class Test[A] { def method(arg: Base[A]) = { arg match { case Derived(_) => 42 } } } ให้ข้อผิดพลาด constructor cannot be instantiated to expected type; found : A$A87.this.Derived required: A$A87.this.Base[A] case Derived(_) => 42 ^ ในขณะที่มันประสบความสำเร็จในการรวบรวมเมื่อAเป็นพารามิเตอร์ประเภทวิธี class Test { …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.