Bu yöntem imzasında üç nokta (…) ne işe yarar?


204

In App Engine docs , üç nokta (nedir JID...bu yöntem imzası için)?

public MessageBuilder withRecipientJids(JID... recipientJids)

Bu üç noktanın işlevi nedir?


7
Bu arada, YATAY ELLIPSIS karakterini , Unicode U + 2026'yı denedim . Java 8'deki NetBeans 8 "geçersiz karakter" bildiriyor. Java varargs için üçlü TAM DURDURMA (nokta) gerekir ....
Basil Bourque

Yanıtlar:


209

Bunlar Java varargs. Belirli bir türden herhangi bir sayıda nesneyi geçirmenize izin verir (bu durumda JID türündedirler).

Örneğinizde, aşağıdaki işlev çağrıları geçerli olacaktır:

MessageBuilder msgBuilder; //There should probably be a call to a constructor here ;)
MessageBuilder msgBuilder2;
msgBuilder.withRecipientJids(jid1, jid2);
msgBuilder2.withRecipientJids(jid1, jid2, jid78_a, someOtherJid);

Buradan daha fazlasını görün: http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html


16
Bağımsız değişkenlerin bir JID dizisi olarak da iletilebileceğini unutmayın (bu, varargs'ı geriye dönük olarak uyumlu hale getirir).
mjn

54
Ayrıca 0 varargs (hiçbir şey) geçmenin yasal olduğunu unutmayın.
Hawkeye Parker

9
Son olarak, vararg yöntemin son parametresi olmalıdır. Bu nedenle, aynı yöntemde iki vararg parametreniz olamaz. Belki bu yöntemi ilginç bulabilirsiniz docs.oracle.com/javase/7/docs/api/java/util/…
BlackBrain

63

Yöntemin içinde üç nokta veya varargs kullanmanın yolu, bir diziymiş gibi:

public void PrintWithEllipsis(String...setOfStrings) {
    for (String s : setOfStrings)
        System.out.println(s);
}

Bu yöntem şu şekilde çağrılabilir:

obj.PrintWithEllipsis(); // prints nothing
obj.PrintWithEllipsis("first"); // prints "first"
obj.PrintWithEllipsis("first", "second"); // prints "first\nsecond"

İçinde PrintWithEllipsis, türü setOfStringsbir String dizesidir. Böylece derleyiciye biraz iş kaydedebilir ve bir dizi geçirebilirsiniz:

String[] argsVar = {"first", "second"};
obj.PrintWithEllipsis(argsVar);

İçin varargs yöntem, bir dizi parametre aynı tipte bir dizi olarak işlenir. Dolayısıyla, iki imza yalnızca bir örnek bir dizi ve diğeri bir dizi bildirirse farklıysa, bu örnekte olduğu gibi:

void process(String[] s){}
void process(String...s){}

bir derleme zamanı hatası oluşur.

Kaynak: Teknik terimin ortak terim yerine Java Programlama Dili belirtimi .variable arity parametervarargs


23

Üç nokta (...) notasyonu aslında matematikten ödünç alınır ve "... vb." Anlamına gelir.

Java'da kullanımına gelince varargs, yöntem çağrısına herhangi bir sayıda argüman eklenebileceği anlamına gelir. Tek sınırlama varargs, yöntem imzasının sonunda olması gerektiğidir ve her yöntem için yalnızca bir tane olabilir.


6

Bunlar, varargsherhangi bir sayıda argüman alan bir yöntem oluşturmak için kullanılırlar.

Örneğin, PrintStream.printf yöntemi bunu kullanır, çünkü ne kadar bağımsız değişken kullanacağınızı bilmiyorsunuzdur.

Bunlar yalnızca argümanların son konumu olarak kullanılabilir.

varargsJava 1.5'e eklendi


3

Bu, yöntemin değişken sayıda argümanı ("varargs") kabul ettiği anlamına gelir JID. Yöntem dahilinde recipientJidssunulmaktadır.

Bu, isteğe bağlı olarak birden fazla bağımsız değişkeni doğal bir şekilde işleyebilecek bir yönteminiz olduğu ve oluşturmanın çirkinliğine sahip olmadan aynı yönteme bir, iki veya üç parametre iletebilen çağrılar yazmanıza izin veren durumlar için kullanışlıdır. anında bir dizi.

Ayrıca sprintfC'den gelen deyimleri ; String.format()örneğin bkz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.