相关疑难解决方法(0)

Java中的ADT类多态(不改变类)

Haskell中,我可以定义以下数据类型:

data Tree = Empty
      | Leaf Int
      | Node Tree Tree
Run Code Online (Sandbox Code Playgroud)

然后写这样的多态函数:

depth :: Tree -> Int
depth Empty = 0
depth (Leaf n) = 1
depth (Node l r) = 1 + max (depth l) (depth r)
Run Code Online (Sandbox Code Playgroud)

Java中,我可以使用接口模拟代数数据类型:

interface Tree {}
class Empty implements Tree {}
class Leaf implements Tree { int n; }
class Node implements Tree { Tree l; Tree r; }
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试使用类似Haskell的多态,我会收到一个错误:

int depth(Empty node) {
    return 0;
}
int depth(Leaf …
Run Code Online (Sandbox Code Playgroud)

java haskell algebraic-data-types

10
推荐指数
4
解决办法
788
查看次数

标签 统计

algebraic-data-types ×1

haskell ×1

java ×1