问题标签 [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.
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>)
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?
java - Java:使用泛型和映射而不进行强制转换/@SuppressWarnings
我现在多次遇到这个问题,并且总是通过一些强制转换和@SuppressWarnings
注释来解决这个问题。
相关接口/抽象类:
示例实现:
使用这种模式,我可以决定是否需要new DataImpl1Operations
每次都创建一个。或者也许使用一个final static NO_OP
实现或者你有什么。
编码:
现在我想把所有这些工厂放在一个Map<Class<T>, DataOperationsFactory<T>>
(构造函数)中。然后从中读取(getOps
方法)。
有没有办法在没有未经检查的铸造的情况下做到这一点?
java - PECS 参数化类
我有一小段代码,我在其中创建了自己的 java.util.stream 实现。
我需要使用 PECS 规则对其进行参数化。但是要么我不太了解 PECS 规则,要么我的班级设计得很糟糕——我不知道如何正确实施它。
例如,当我试图在 filter() 方法实现中实现它(?扩展 T)时 - 我不能使用 foreach 循环。
也许你有一些想法?提前致谢。
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 的子接口而不是子类可以工作,即编译得非常好:
java - PECS:如何将消费者转变为生产者?
我有一家生产餐点的餐厅。厨房的盘子是消费者。
在最后一行,我知道我的 OhPanda 餐厅只生产竹子。List<? super Food>
在不创建/复制内存中的 ArrayList 的情况下转换我的最佳做法是什么?
更完整的 Gist 写在这里:https ://gist.github.com/nicolas-zozol/8c66352cbbad0ab67474a776cf007427
generics - 如何输入 Collection ?
我有一个看起来像这样的方法。
以及如何使此方法安全地返回给定的集合实例类型?
我试过这个。
java - Java在通配符上限映射中保留泛型类型
从这些课程开始
我创建了实现它的 OneEventProcessor 和 TwoEventProcessor。
}
在另一个类中,我想将它们添加到地图类型-> 处理器中,然后检索和使用。
这不起作用,因为地图将检索 EventProcessor< ? 扩展事件 > 期望捕获 < ? 扩展事件 > 进程中的方法。
有什么办法可以解决这个问题吗?
java - 如何让更精确类型的消费者作为不太精确类型的消费者传入?
我有以下两个功能接口:
IndexBytePairConsumer.java
IndexIntPairConsumer.java
我也有以下方法:
有什么方法可以允许IndexIntPairConsumer
在上述方法中传递一个(因为整数的消费者可以接受字节)?我需要在方法签名中使用原语而不是关联的类,例如Integer
and Byte
,因此任何抽象都变得更加困难。
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.