java – 泛型和流:如何将它变成`StreamTuple :: new`语句?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 泛型和流:如何将它变成`StreamTuple :: new`语句?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1371字,纯文字阅读大概需要2分钟。
内容图文
![java – 泛型和流:如何将它变成`StreamTuple :: new`语句?](/upload/InfoBanner/zyjiaocheng/820/a4dc0253d1ac43cc9c63377ec05bd91f.jpg)
我正在开发一个小型库,它模拟Streams中的多值返回值.为了使其运行良好,我希望能够使用StreamTuple :: new而不是StreamTuple :: create或id – >新的StreamTuple<>(id,id).我尝试了各种修改,但是我的generics-fu不足以弄清楚如何更改源以允许这个.
public class StreamTuple<L, R> {
protected final L left;
protected final R right;
public StreamTuple(L left, R right) {
this.left = left;
this.right = right;
}
/**
* Suitable for method::references. Value is set to id.
*/
public static <L> StreamTuple<L, L> create(L left) {
return new StreamTuple<>(left, left);
}
....
调用代码段:
Map<String, String> m = Stream.of("1", "2", "3")
// .map(StreamTuple::create)
.map(id -> new StreamTuple<>(id, id))
.collect(toMap(StreamTuple::left, StreamTuple::right));
建议?或者不能这样做?
编辑:我想要一个额外的构造函数,只接受一个参数并返回一个StreamTuple,其中L和R是相同的类型.目前的代码并没有反映出这一点,因为它不久之前我无法使它工作,我想我复制了它.我只能找到如何提供一个L / R并让另一个开放.如何为此编写单个参数构造函数?
解决方法:
使用构造函数无法做到这一点,因为没有办法指定参数是L和R的子类型(即连接/交集).该语言具有此类需求的构造,但不允许类型变量之间的交集:
// not allowed (causes a compilation error)
// vvvvv
public <LR extends L & R> StreamTuple(LR val) {
this.left = val;
this.right = val;
}
但是,这可能适用于Java的未来版本.
您必须使用工厂方法,或者,我想,tsolakp建议使用什么.我认为工厂更有意义.
内容总结
以上是互联网集市为您收集整理的java – 泛型和流:如何将它变成`StreamTuple :: new`语句?全部内容,希望文章能够帮你解决java – 泛型和流:如何将它变成`StreamTuple :: new`语句?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。