嗯...这个定义看起来很像我很久以前见过的一些haskell示例。
{-# LANGUAGE ExistentialQuantification #-}
data X = forall a . X { value :: a, viewValue :: a -> String }
instance Show X where show (X { value = x, viewValue = f}) = f x
sample :: [X]
sample = [X 3 show, X "abc" show, X 3.14 show]
当X
应用构造函数时,∀实际上变为。请注意,取出时value
您不知道类型,并且对它没有空的操作集。但是因为viewValue
有点相干,value
可以应用它。
我想interface
您提出的Java的主要区别在于您必须知道中间类型以将结果传递op₁
给op₂
。也就是说,存在类型的正确系统应选择可以根据条件存在的正确类型。也就是说,您应该能够使用类型编写函数∀X. X→(X→boolean)→T
。在一个先前采样这样的功能是X
在构造函数中使用X 3 show
(show
是函数,它接受的任何类型的参数实现Show
,并返回String
)
更新:我只是重新阅读了您的问题,并且我认为我已经为Java进行了适当的构造:
interface T {
boolean op₂();
}
...
T x = new T() {
private final int op₁ = ...;
public boolean op₂() { return ((op₁ % 2) == 0); }
};
T y = new T() {
private final char op₁ = ...;
public boolean op₂() { return ('0' <= op₁ && op₁ <= '9'); }
};
if (x.op₂() && y.op₂()) ...
您说的没错this
-实际上是您的₁。
因此,我想我现在已经了解到,经典的OOP语言(Java,C#,C ++等)总是实现具有单个值的存在类型,this
并且在其上存在一个称为“方法”的函数,该函数隐式地使用该值进行调用:)
PS:对不起,我对Java不太熟悉,但我希望您有这个主意。