Aşağıdaki sorunla uğraşıyordum. Her biri java'da jenerik tip argümanları ile tanımlanmış kendi giriş ve çıkış tiplerine sahip bir dizi fonksiyon nesnem var. Bunları bir zincir içinde düzenlemek istiyorum, böylece ham veri, bir sonraki nesnenin girdi türü olan çıkış türüne dönüştürülmüş, birinci işleve girilir, vb. Tabii ki bu, sabit kod için önemsiz olurdu, ancak kodun yeni işlev nesnelerine takılabilmesini istiyorum. ben sadece tip argümanları (sadece son çıkış tipi) dışarı bırakırsanız, bu görünüşünden: Burada Java Generics: birlikte zincirleme genel işlev nesnesi
public T process() {
Iterator<Context> it = source.provideData();
for(Pipe pipe : pipeline) {
it = pipe.processIterator(it);
}
return sink.next(it);
}
veriler üzerinde bir yineleyici fonksiyon nesneleri arasında geçirilir ve bağlam Bağlam olmalıdır
. Aşağıdaki türde bir borunun takılıp çıkarılabilmesi ve tip güvenliğinin korunmasının bir yolu var mı?düzenleme: netlik için, bir dizi işlev nesnesi, borularım var. her biri belirli bir girdi olarak alır ve başka bir tip çıkarır. (aslında bu tipler üzerinde bir yineleyiciler), örneğin Pipe<A,B> -> Pipe<B,C> -> Pipe<C,D> -> ...
, örneğin bir borunun çıktısı bir sonraki boru için giriş tipi olacak şekilde zincirlenecektir. Burada A tipi bir yineleyiciyi ve türünü (geçmiş borunun çıkışını) kabul edecek bir lavabo üreten bir kaynak da vardır. Bu işleri daha netleştirir mi? Soru şu ki, girdi ve çıktı türlerinin uyumluluğuna kritik bir bağımlılık var, bunun için bir yol var mı?
Fonksiyon nesnelerinin boru hattına eklenmesi, tip güvenliğini sağlamak için en uygun zaman olabileceğini düşünmüyorum, ancak bunu nasıl yapacağımı bilmiyorum. Ben şu anda aşağıda benziyor fonksiyon nesneler için bir toplayıcı yöntemine sahip : düzenlemek 2
public void addPipe(Pipe<?,?> pipe) {
pipeline.add(pipe);
}
ilk tür parametresi "sonu" nin aynı olup olmadığını ben kontrol etmek istiyorum Geçerli boru ve değilse bir istisna atmak? Burada derleme güvenliği sağlamak için iyi bir yol olduğunu düşünmüyorum. Mevcut borunun "ucu" daha sonra giriş borusunun ikinci tip paramına ayarlanabilir. Bunu jeneriklerle nasıl yapacağımı düşünemiyorum ve sınıf bilgilerinin içinden geçmek oldukça çirkin görünüyor.
Tür silme, yaşamınızı tamamen genel işlevler için zorlaştırabilir. JVM bayt derleyici türünü genel sınıflar örneğinden kaldırır, bu nedenle Liste Liste
Gereksinimi biraz daha açıklayabilir misiniz? Ne sahip olduğunuzu ve neye sahip olmak istediğinizi çözemiyorum. –
, bu nedenle, en iyi yaklaşım, boru fonksiyon nesnesini yerleştirirken (nasıl?) Tip güvenliğinden emin olmak ve sadece yukarıdaki yöntemle ilgili uyarıları bastırmaktır? – downer