【问题标题】:Java equivalents to Delphi language features [duplicate]与 Delphi 语言功能等效的 Java [重复]
【发布时间】:2016-03-20 17:49:30
【问题描述】:

我通常在 Delphi 中编写代码,但我不得不快速赶上 Java 对于一个特定的项目。我在识别 Java 时遇到问题 等价于许多 Delphi 语言功能,因为大概 使用不同的术语来指代它们。

我从 Java 语言规范中看到它支持 lambda 表达式,所以我想我可以在某处找到显示 Java 等效于匿名方法的示例。

我的问题是 Java 是否具有以下等价物 Delphi 类型,如果是,它们的名称或等效名称是什么 Java 构造:

  1. 传统程序、函数类型,如type MyProc = procedure(I : Integer)

  2. procedure of objectfunction of object

?

(我希望这两个足够接近,可以在一个问题中提出)

【问题讨论】:

  • 你试过在Java Language Specification找到答案吗?
  • 我不熟悉 Delphi,但我怀疑答案是否定的,因为 Java 没有函数类型。每个 lambda 表达式都必须针对可以从上下文推断的特定功能接口。
  • @mjn:当然,这就是我找到对 Lambdas 的引用的地方。但是 v.8 规范有 788 页,并且不知道相关的语法结构/术语,我真的不知道要寻找什么。这就是为什么我问...
  • @PaulBoddington:这可以解释为什么我找不到任何关于我的 1. 的东西;=)。谷歌发现可能与我的 2.:books.google.co.uk/… 相关的东西,这似乎表明我需要查看 java.reflect.Method ...
  • 投了反对票的人:为什么人们可以经常提出零研究、琐碎、Delphi 101 的问题却没有得到 -1,但问一个有效的、经过研究的关于语言等价物的问题会得到一个?

标签: java delphi java-8 delphi-10-seattle


【解决方案1】:
  1. 在 Java 中,方法永远不会独立,它们总是绑定到接口/类。所以没有什么可以创建类型引用。

  2. 检查例如Java SE 8: Lambda Quick Start

它使用 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);
        }
    }
}

其中 Predicate 接口定义为

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

这在功能上接近 Delphi 中的对象函数(因为接口具有返回类型)。对于对象的方法,函数式接口根本没有返回类型(void)。

【讨论】:

    【解决方案2】:

    Java 没有等效的 Delphi Procedural Types,它允许您将过程和函数视为可以分配给变量或传递给其他过程和函数的值。

    最接近的功能匹配是Java Anonymous Class,它允许您同时声明和实例化类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-01
      • 1970-01-01
      • 2016-08-28
      • 1970-01-01
      • 1970-01-01
      • 2011-03-18
      • 2011-06-13
      • 1970-01-01
      相关资源
      最近更新 更多