Запитання з тегом «type-inference»

Виведення типу - це процес автоматичного виведення типів для програм, використовуючи правила, визначені системою типів.

3
Чому ця програма Java 8 не компілюється?
Ця програма чудово компілюється в Java 7 (або в Java 8 з -source 7), але не вдається скомпілювати з Java 8: interface Iface<T> {} class Impl implements Iface<Impl> {} class Acceptor<T extends Iface<T>> { public Acceptor(T obj) {} } public class Main { public static void main(String[] args) { Acceptor<?> …

4
Чому тип повернення лямбда не перевіряється під час компіляції?
Використовуваний посилання методу має тип повернення Integer. Але несумісне Stringдозволено в наступному прикладі. Як виправити withдекларацію методу, щоб забезпечити безпеку типу посилання методу без ручного введення? import java.util.function.Function; public class MinimalExample { static public class Builder<T> { final Class<T> clazz; Builder(Class<T> clazz) { this.clazz = clazz; } static <T> Builder<T> …

6
Чому Java не може зробити висновок про супертип?
Ми всі знаємо, що Лонг розширюється Number. То чому це не складається? І як визначити метод withтак, щоб програма компілювалась без будь-якого вручну? import java.util.function.Function; public class Builder<T> { static public interface MyInterface { Number getNumber(); Long getLong(); } public <F extends Function<T, R>, R> Builder<T> with(F getter, R returnValue) …

2
Чому `std :: mem :: drop` точно так само, як і закриття | _ | () у межах вищого рангу?
Реалізація std::mem::dropдокументально підтверджена таким чином: pub fn drop<T>(_x: T) { } Як таке, я б очікував, що закриття |_| ()(у розмові відоме як закриття туалету ) буде потенційною заміною 1: 1 dropв обох напрямках. Однак, наведений нижче код показує, що dropвін не сумісний із ознакою вищого рейтингу, прив'язаною до параметра …

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 …

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 } } } дає помилку …
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.