问题标签 [pecs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
316 浏览

java - 如何从我的方法中删除“未检查”警告?

我有以下代码

它被称为如下

它发出警告Type safety: Unchecked cast from Parcelable to T

不管我做什么,我总是有一些令人讨厌的编译错误。我已阅读有关 PECS 规则的信息,但我无法在此处应用它。

示例解决方案(不编译)

使用它作为

.parse(bundle.getParcelableArrayList("SomeString"));

产品

The method parse(List<SomeClass>) in the type MyClass.ParcelableParser<SomeClass> is not applicable for the arguments (ArrayList<Parcelable>)

0 投票
1 回答
163 浏览

java - PECS does not work on return types with interface

Consider the following example,

And I have 2 very similar methods:

And then the method calls:

But consider the below 2:

Eclipse Error:

Bound mismatch: The generic method returnC() of type Testing is not applicable for the arguments (). The inferred type ClsB&ClsA is not a valid substitute for the bounded parameter <T extends ClsA>

But the following code compiles fine:

Why is that for interface, the generics bound is not considered in return types?

0 投票
1 回答
181 浏览

java - Java:使用泛型和映射而不进行强制转换/@SuppressWarnings

我现在多次遇到这个问题,并且总是通过一些强制转换和@SuppressWarnings注释来解决这个问题。

相关接口/抽象类:

示例实现:

使用这种模式,我可以决定是否需要new DataImpl1Operations每次都创建一个。或者也许使用一个final static NO_OP实现或者你有什么。

编码:

现在我想把所有这些工厂放在一个Map<Class<T>, DataOperationsFactory<T>>(构造函数)中。然后从中读取(getOps方法)。


有没有办法在没有未经检查的铸造的情况下做到这一点?

0 投票
0 回答
60 浏览

java - PECS 参数化类

我有一小段代码,我在其中创建了自己的 java.util.stream 实现。

我需要使用 PECS 规则对其进行参数化。但是要么我不太了解 PECS 规则,要么我的班级设计得很糟糕——我不知道如何正确实施它。

例如,当我试图在 filter() 方法实现中实现它(?扩展 T)时 - 我不能使用 foreach 循环。

也许你有一些想法?提前致谢。

0 投票
0 回答
105 浏览

java - 当上限通配符与下限通配符一起使用时编译失败

情况:我正在制作一个配置库,带有一个表示数据的 Config 接口和一个像这样的 Parser 接口:

解析器必须能够将数据解析为新的配置对象 (C) 或现有的配置对象 (D)。C 扩展了 D,因为我们可以手动创建 C 并将数据解析到其中是合乎逻辑的。当然 D 扩展了 Config 因为我们解析配置。

假设我们有一个实现 Config 的类 MyConfig(但它也可以是一个通用的“T extends Config”),并且我们想要一个可以创建和解析它的 Parser。让我们遵循 PECS 规则:

  • 我们的解析器可以解析 MyConfig,但也可能是它的超类型 => 我应该使用“?super MyConfig”
  • 我们的解析器可以生成 MyConfig,但也许它实际上会生成一个子类型 => 我应该使用 "? extends MyConfig"

因此我最终得到了这个:

但是,虽然 IntelliJ 没有抱怨任何事情,但编译(javac 1.8.0_131)失败并出现以下错误:

类型参数?extends package.MyConfig 不在类型变量 C 的范围内

这很奇怪,因为“MyConfig 的某个子类型”显然是“MyConfig 的某个超类型”的子类型,对吧?

仅当同时使用两个通配符时才会出现此问题。此外,使用另一种泛型类型而不是上限有效:

我在这里想念什么?我可以用我的生产者-消费者解析器做什么?

编辑:我发现一些更令人困惑的事情:使用 Config 的子接口而不是子类可以工作,即编译得非常好:

0 投票
2 回答
84 浏览

java - PECS:如何将消费者转变为生产者?

我有一家生产餐点的餐厅。厨房的盘子是消费者。

在最后一行,我知道我的 OhPanda 餐厅只生产竹子。List<? super Food>在不创建/复制内存中的 ArrayList 的情况下转换我的最佳做法是什么?

更完整的 Gist 写在这里:https ://gist.github.com/nicolas-zozol/8c66352cbbad0ab67474a776cf007427

0 投票
1 回答
44 浏览

generics - 如何输入 Collection

我有一个看起来像这样的方法。

以及如何使此方法安全地返回给定的集合实例类型?

我试过这个。

0 投票
1 回答
234 浏览

java - Java在通配符上限映射中保留泛型类型

从这些课程开始

我创建了实现它的 OneEventProcessor 和 TwoEventProcessor。

}

在另一个类中,我想将它们添加到地图类型-> 处理器中,然后检索和使用。

这不起作用,因为地图将检索 EventProcessor< ? 扩展事件 > 期望捕获 < ? 扩展事件 > 进程中的方法。

有什么办法可以解决这个问题吗?

0 投票
2 回答
60 浏览

java - 如何让更精确类型的消费者作为不太精确类型的消费者传入?

我有以下两个功能接口:

IndexBytePairConsumer.java

IndexIntPairConsumer.java

我也有以下方法:

有什么方法可以允许IndexIntPairConsumer在上述方法中传递一个(因为整数的消费者可以接受字节)?我需要在方法签名中使用原语而不是关联的类,例如Integerand Byte,因此任何抽象都变得更加困难。

0 投票
1 回答
95 浏览

java - When to use PECS when designing a library?

I am working on a library which makes heavy use of functional interfaces and currently struggle whether to apply PECS or not:

vs.

It just seems so cluttered and even the error messages turn from:

to something like

which is so hard to read. I have read the following question but still struggle whether to apply it or not as it pollutes the library code and worsens the compiler error messages. Personally I would opt for PCES for the Predicate<A> variants.

Is there some guideline whether to apply PECS or not? I know the pros and cons but I wonder how often people really store e.g. Predicate in fields as lamdas and method references are not affected by what PECS offers. I did not find any further advice on the web. Here is one of the classes affected by this.