java 中派生_Java中的接口派生

我最近在使用Java,并且想知道Java中是否存在任何类型的接口实现派生.我首选的编程语言是Haskell,它在很多方面与Java相对立,但我想知道Java是否具有类似功能的一个特性是能够从其参数的接口实现派生复合类型的接口实现.例如,在Haskell中:

data Pair k v = Pair k v

instance (Ord k) => Ord (Pair k v) where

compare (Pair x _) (Pair x' _) = compare x x'

这允许您在订购第一个参数时订购一个配对,而不明确要求这样做.但是,我在Java中最接近的是通过明确的要求:

class Pair, V> extends Comparable> {

K k;

V v;

public int compareTo(Pair p) {

return k.compareTo(p.k);

}

}

如果没有一种方法可以推断可比性,我就不可能在不确保所有对具有可比较的第一个元素的情况下实现对的BST,因此我不能实现任何类型的Map,其中第一个元素没有明确要求是可比的.有没有办法绕过这个,除了创建一个我的BST类的方法,试图通过首先将它作为可比较的方法来比较泛型类型,然后作为具有可比较的键的一对,比较可能的可比性?

解决方法:

这不可能. Java缺少类型类机制; Java的接口只是模糊地类似于类型类,但缺乏自动实现接口的任何手段(其中,与类型类的更基本的差异).一个类型实现或不实现一个接口 – 没有办法让一个类型在编译时神奇地继承它已经没有的东西,也没有让一个类型停止继承它已经没有的东西.

也不可能将约束向下移动到compareTo,因为这必须发生在Comparable中compareTo的定义中.

我很高兴有人在这方面证明我错了.

在JVM上最接近Haskell样式类型的是Scala和Frege – Scala的隐式解析机制在某些方面甚至比Haskell更强大/更具表达性,但也更冗长并且有一些基本限制WRT使用存在性和类型类约束一起; Frege只是Haskell到JVM的克隆.

解决方法:

除了特定于Java或特定于问题,可能基于模式和部分的解决方法之外,我所知道的最接近的是类型类的显式重新实现(这只是Haskell特定术语/ ad-hoc polymorphism的实现).

链接到bayou.io的问题会让你开始(尽管它很简单):Constrained interface implementation.类型类实例派生也需要明确地发生 – 你不会得到任何类型级别,编译时自动计算你在Haskell或Scala或类似的东西中得到的魔法,但你仍然可以获得灵活性和(大多数?)静态检查.

标签:java,interface,haskell,typeclass,generics

来源: https://codeday.me/bug/20190516/1116811.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值