2015-03-02 23 views
5

örneğini ve Text uzanır SubTest adında bir sınıf döndürür nasıl yapılır, eminim denilen ne zaman olacak SubTest örneğini döndürür Test sınıfında bir yöntemi istiyorum yapmak ister:Üst sınıf Yöntemi Bir sınıf <code>Test</code> çağrıda alt sınıf

SubTest test = new SubTest().setTest("Hello!").setOtherTest("Hi!"); 

setTest() ve setOtherTest() yöntemleri Test sınıfında olmalıdır.

Ama ne zaman:

public Test setTest(String test) { return this; } 

Sadece Test örneğini döndürür yüzden SubTest için Test döküm zorunda, ama ben istemiyorum.

Mümkün mü? Evet ise nasıl?

Teşekkürler, MinusKube.

+0

'Test' sınıfınız 'soyut' olacak mı? –

cevap

7

bir yöntem sahibini (this) için 'zincir' çoklu yöntem çağrıları muktedir döndürmesini sağlamak akıcı API olarak adlandırılır. Ayrıca

Student s = new Student().setName("Jessy").setStudentId("1234"); 
Teacher t = new Teacher().setName("Walter").setParkingLotId(17); 

bakınız: Şimdi

public class Person<T extends Person<T>> { 
    public T setName(String name) { 
     // do anything 
     return (T)this; 
    } 
} 

public class Student extends Person<Student> { 
    public Student setStudentId(String id) { 
     // do anything 
     return this; 
    } 
} 

public class Teacher extends Person<Teacher> { 
    public Teacher setParkingLotId(int id) { 
     // do anything 
     return this; 
    } 
} 

, herhangi atmalarını gerekmez: Ortaya çıkan kod olsa nasılsa az okunabilir olabilir, bununla birlikte eşdeğer ilaç kullanımıyla sorununuzu çözebilir Using Generics To Build Fluent API's In Java

+0

Düz noktaya – pisaruk

0

Bu yöntemlerin bir SubTest döndürmesi mümkündür, çünkü Java'nın dönüş türleri değişkendir. Eğer, SubTest yılında, bir SubTestthis geri dönebilmek için

Sen bu yöntemleri geçersiz kılmalıdır örn:

@Override 
public SubTest setTest(String message) { 
    super.setTest(message); // same functionality 
    return this; 
} 
+0

Tüm sınıflar için tüm yöntemleri geçersiz kılmalı mıyım? – MinusKube

+0

Evet, yoksa '' '' 'Test' olarak yazılır. En azından geçersiz kılmalar önemsiz. – rgettman