Аббревиатура java generics от "Producer (использует) Extends, Consumer (uses) Super"
1 ответ

PECS не работает на типах возвращаемых данных с интерфейсом

Рассмотрим следующий пример: class ClsA {} class ClsB {} interface IntA {} interface IntB {} И у меня есть 2 очень похожие методы: static <T extends ClsA> T returnC() { // Here T extends the class return null; } static <T extends IntA> T…
03 дек '15 в 11:35
2 ответа

PECS: Как преобразовать Потребителя в Производителя?

У меня есть ресторан, который производит еду. На кухне даны тарелки, которые являются Потребителями. class Food{} class Bamboo extends Food {} interface Kitchen { void build(List<? super Food> dessert); } abstract class Restaurant { Kitchen ki…
20 июл '17 в 10:42
1 ответ

Как я могу печатать для коллекции<? супер некоторые>?

У меня есть метод, похожий на этот. public void some(..., Collection&lt;? super Some&gt; collection) { // WOOT, PECS!!! final Stream&lt;Some&gt; stream = getStream(); stream.collect(toCollection(() -&gt; collection)); } И как я могу сделать так, что…
13 июл '18 в 04:48
3 ответа

Дженерики Java PECS

Я знаю, что означает PECS. Продюсер продлевает,Consumer Super. дело в том, откуда мне знать, является ли он потребителем или производителем? Также этот код соответствует "PECS" public class Tree&lt;T&gt; { //List of branches for this tree private Li…
30 авг '12 в 13:13
1 ответ

Можно ли написать единственный метод, который принимает универсальный параметр различной абстракции?

В качестве продолжения этого вопроса можно ли написать один метод, который добавляет Dog в подходящую комнату? (В этом примере он будет принимать либо Animal комната или Dog комната.) Или я вынужден написать два разных метода, как показано ниже? (Я …
29 мар '12 в 16:20
1 ответ

Как убрать предупреждение "unchecked" из моего метода?

У меня есть следующий код private static class ParcelableParser&lt;T&gt; { private ArrayList&lt;T&gt; parse(List&lt;Parcelable&gt; parcelables) { ArrayList&lt;T&gt; parsedData = new ArrayList&lt;T&gt;(); for(Parcelable parcelable : parcelables) { pa…
17 окт '14 в 12:07
1 ответ

Java: Работа с универсальными элементами и картами без приведения / @SuppressWarnings

Теперь я сталкивался с этой проблемой несколько раз и всегда решал ее с помощью @SuppressWarnings аннотаций. Соответствующие интерфейсы / абстрактные классы: public abstract class Data { } public interface DataOperations { boolean isValid(); } publi…
24 июн '16 в 16:59
2 ответа

Ограниченный универсальный метод с типом 'super'

Согласно литературе, которую я прочитал, у нас есть сочные фрукты, реализующие следующий интерфейс: public interface Juicy&lt;T&gt; { Juice&lt;T&gt; squeeze(); } Используя переменные ограниченного типа, следующий метод собрал бы кучу фруктов и сжал …
07 май '13 в 17:14
5 ответов

Java Generics (ограниченные подстановочные знаки)

Согласно книге "Эффективная Java" Джошуа Блоха существует правило о том, как / когда использовать ограниченные символы подстановки в дженериках. Это правило PECS (Производитель-Расширяет, Comsumer-Super). Когда я изучаю следующий пример: Stack&lt;Nu…
1 ответ

Java сохраняет универсальный тип в карте верхней границы подстановочного знака

Начиная с этих классов public class Event { private EventType eventType; public EventType getEventType() { return eventType; } public void setEventType(EventType eventType) { this.eventType = eventType; } } public class OneEvent extends Event { publ…
15 окт '18 в 21:12
4 ответа

Почему добавление подкласса типа в коллекцию недопустимо?

Учитывая этот фрагмент кода //Creates a list of List numbers List&lt;List&lt;Number&gt;&gt; num = new ArrayList&lt;List&lt;Number&gt;&gt;(); //Creates a list of List doubles List&lt;List&lt;Double&gt;&gt; doub = new ArrayList&lt;List&lt;Double&gt;&g…
30 авг '12 в 14:49
2 ответа

Как сделать так, чтобы потребитель более точного типа передавался как потребитель менее точного типа?

У меня есть следующие два функциональных интерфейса: IndexBytePairConsumer.java package me.theeninja.nativearrays.core; @FunctionalInterface public interface IndexBytePairConsumer { void accept(long index, byte value); } IndexIntPairConsumer.java pa…
0 ответов

PECS параметризованный класс

У меня есть небольшой фрагмент кода, где я создал свою собственную реализацию java.util.stream. Мне нужно параметризовать его с помощью правила PECS. Но либо я плохо понимал правило PECS, либо мой класс плохо спроектирован - я не знаю, как правильно…
23 авг '16 в 15:12
3 ответа

Java, дженерики и PECS: все еще возникают проблемы с пониманием C-части; конкретный пример?

Я выложу одну ссылку здесь: Collections.sort(), На SO было много постов, касающихся парадигмы PECS, включая эту. В моем личном коде я довольно часто использую дженерики, но только когда-либо использовал P-часть (то есть &lt;X extends SomethingElse&g…
19 июн '13 в 13:39
2 ответа

TreeSet.add() в Java не соответствует принципу PECS (Generics)

У меня есть следующий кусок кода: public interface Segment&lt;T&gt; extends Period { ... }; public class SegmentImpl_v1&lt;T&gt; implements Segment&lt;T&gt; { ... }; public interface TimeLine&lt;T, S extends Segment&lt;T&gt;&gt; { ... }; public clas…
04 ноя '11 в 23:39
18 ответов

Что такое PECS (продюсер продвигает Consumer Super)?

Я столкнулся с PECS (сокращение от производителя extends и потребитель super) пока читаю на дженерики. Может кто-нибудь объяснить мне, как использовать PECS для разрешения путаницы между extends а также super?
27 апр '10 в 17:16
3 ответа

Производитель и Потребитель с Дженериками в Java

У меня есть этот метод для извлечения объектов, которые являются экземпляром данного класса: public class UtilitiesClass { public static final Collection&lt;Animal&gt; get(Collection&lt;Animal&gt; animals, Class&lt;? extends Animal&gt; clazz) { // r…
26 фев '14 в 16:50
3 ответа

Преодоление дженериковых паттернов

Я читал об общих правилах get и put, которые должны помешать вам добавить Banana к List&lt;? extends Fruit&gt;: public abstract class Fruit { } public class Banana extends Fruit { } public class Apple extends Fruit { } List&lt;? extends Fruit&gt; ls…
01 апр '14 в 13:12
0 ответов

Компиляция не удалась, когда верхний предел подстановочный знак используется с нижним

Ситуация: я делаю библиотеку конфигурации с интерфейсом Config, который представляет данные, и интерфейсом парсера, подобным этому: public interface Parser&lt;C extends D, D extends Config&gt; { C parse(File f); void parse(File f, D destination); } …
14 июл '17 в 23:53
1 ответ

Когда использовать PECS при разработке библиотеки?

Я работаю над библиотекой, в которой интенсивно используются функциональные интерфейсы, и в настоящее время думаю, стоит ли применять PECS или нет: Predicate&lt;A&gt; Function&lt;A,B&gt; BiFunction&lt;A,B,C&gt; против Predicate&lt;? super A&gt; Func…
26 май '19 в 18:56