Hmm ... Bu tanım uzun zaman önce gördüğüm bazı haskell örneğine çok benziyor.
{-# 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]
Yapıcı Xuygulandığında ∀ aslında ∃ olur. Çıkardığınızda value, türü bilmediğinizi ve üzerinde boş bir işlem kümesinin olduğunu unutmayın. Ama onunla viewValueuyumlu olduğu için valueona uygulanabilir.
Sanırım interfaceönerdiğiniz Java'nın temel farkı, sonucu geçmek için ara türü bilmeniz op₁gerektiğidir op₂. Varoluşçu tip için uygun sistem, koşullara göre var olması garanti edilen doğru tipi seçmelidir. Yani sen türüyle işlevi yazmak gerekir: ∀X. X→(X→boolean)→T. Önceki örnekte böyle bir işlev kullanılan Xyapıcıdır X 3 show( showuygulayan Showve döndüren herhangi bir türün argümanını alan işlevdir String)
Güncellendi: Sorunuzu tekrar okudum ve Java için uygun bir yapım olduğunu düşünüyorum:
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₂()) ...
Bahsetmek konusunda haklısınız this- aslında sizin op₁unuz.
Şimdi klasik OOP dillerinin (Java, C #, C ++ vb.) Her zaman tek bir değere sahip varoluşsal türü thisve bu değerle örtük olarak adlandırılan "yöntemler" adı verilen bir işlevi uyguladığını anladım :)
PS Maalesef Java'ya pek aşina değilim ama umarım bu fikre sahipsiniz.