Java中相当于Delphi语言特性的对应项

3
我通常使用Delphi编码,但现在需要快速学习Java来完成一个特定项目。我在寻找Java中与Delphi语言特性相对应的术语时遇到了问题。
从Java语言规范中可以看出,它支持lambda表达式,因此我想我能够找到一些示例来展示Java中匿名方法的等价物。
我的问题是,Java是否有以下Delphi类型的等价物,并且如果有,它们被命名为什么或者Java中的等价构造是什么:
1. 传统的过程式、功能型类型,例如type MyProc = procedure(I : Integer) 2. procedure of objectfunction of object (希望这两个问题足够接近,可以在一个问题中问)

你尝试在Java语言规范中找到答案了吗? - mjn
1
我不熟悉Delphi,但我怀疑答案是否定的,因为Java没有函数类型。每个lambda表达式必须针对特定的功能接口,这可以从上下文中推断出来。 - Paul Boddington
@mjn:当然,那就是我找到Lambda参考的地方。但是v.8规范有788页,如果不知道相关的语法结构/术语,我真的不知道该找什么。这就是为什么我问的原因... - Alex James
2
谁给踩了赞:人们怎么能经常提出零研究、琐碎的 Delphi 101 问题而不会得到 -1,但是询问关于语言等效性的有效研究问题却会得到一个? - Alex James
另一个重复问题:https://dev59.com/kXVD5IYBdhLWcg3wO5AD - David Heffernan
2个回答

4
  1. 在Java中,方法从不是独立的,它们总是绑定到接口/类。因此没有什么可以为其创建类型引用。

  2. 例如,请查看Java SE 8:Lambda快速入门

它使用Lambda表达式并将其分配给变量allPilots ...

Predicate<Person> allPilots = p -> p.getAge() >= 23 && p.getAge() <= 65;

...并使用它从不同的地方调用方法:

System.out.println("\n=== Mail all Pilots ===");
robo.mailContacts(pl, allPilots);
...
public void mailContacts(List<Person> pl, Predicate<Person> pred) {
    for (Person p : pl) {
        if (pred.test(p)) {
            roboEmail(p);
        }
    }
}

在Java中,Predicate接口被定义为

public interface Predicate<T> {
    public boolean test(T t);
}

这在功能上与Delphi中的对象函数相似(因为接口具有返回类型)。对于对象方法,功能接口只是没有返回类型(void)。

3
Java没有Delphi Procedural Types的等价物,它允许您将过程和函数视为可以分配给变量或传递给其他过程和函数的值。最接近的功能匹配是Java Anonymous Class,它允许您同时声明和实例化类。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接