2016-03-20 16 views
2

Normalde Delphi kodlarım ancak belirli bir proje için Java hızlı 'da yakalamak zorundayım. Bir çok Delphi dili özelliklerine Java eşdeğerlerini tanımlamakta sorun yaşıyorum çünkü muhtemelen bunlara başvurmak için farklı terminoloji kullanılır.Delphi dil özelliklerine Java eşdeğerleri

Java dil belirtiminden lambda ifadelerini desteklediğini görüyorum, bu yüzden anonim yöntemlere Java eşdeğerini gösteren bir yeri bulabileceğimi hayal edebiliyorum.

burada Sorum deyişle, onlar adında nelerdir ya da ne denk Java yapıları vardır eğer öyleyse, Java, aşağıdaki Delphi türlerine eşdeğerleri ve kapsamaz:

  1. Gelenek usul, fonksiyonel türleri gibi type MyProc = procedure(I : Integer)

  2. procedure of object ve function of object

yılında

?

+0

[Java Dil Özellikleri] 'nde (https://docs.oracle.com/javase/specs/) bu yanıtı bulmaya çalıştınız mı? – mjn

+1

Delphi ile aşina değilim, ama Java'nın işlev türleri olmadığı için cevabın hayır olduğundan şüpheliyim. Her lambda ifadesi, bağlamdan çıkarılabilecek belirli bir işlevsel arayüzü hedeflemelidir. –

+0

@mjn: Elbette, Lambdas referansını burada buldum. Fakat v.8 özelliği 788 sayfadır ve ilgili dilbilgisel yapıları/terminolojiyi bilmeden gerçekten ne aradığımı bilmiyorum. Bu yüzden sordum ... –

cevap

2

Java Eğer değişkenler veya atanabilir değerler olarak prosedürler ve fonksiyonlar tedavi olanağı sağlayacak Delphi Procedural Types eşdeğer yok (bunlardan ikisi yeterince yakın tek soru sorulmasını umut) diğer prosedürlere ve fonksiyonlara geçti.

En yakın işlevsel eşleşme, aynı anda sınıfı bildirmenizi ve başlatmanızı sağlayan Java Anonymous Class olacaktır.

4
  1. Java'da, yöntemler asla bağımsız değildir, her zaman arabirimlere/sınıflara bağlıdırlar. Bu yüzden tür referansları oluşturmak için hiçbir şey yok.

  2. Örnek olarak Java SE 8: Lambda Quick Start.

    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); 
         } 
        } 
    } 
    
    :

Bir Lambda ifade kullanan ve bir değişkene allPilots atar

...

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

... ve farklı bir yerden yöntemi çağırmak için kullanır

Burada Öntanımlı arabirim

public interface Predicate<T> { 
    public boolean test(T t); 
} 
olarak tanımlanmıştır.

Bu işlev, Delphi'de nesnesinin işlevine yakındır (çünkü arabirimin bir dönüş türü vardır). Nesne'un yöntemine ilişkin olarak, işlevsel arabirimin yalnızca dönüş tipi (boşluk) yoktur.