2015-03-02 8 views
5

का उदाहरण मैं एक वर्ग Test कहा जाता है और एक वर्ग SubTest जो Text फैली कहा जाता है बनाने के लिए, मैं, Test वर्ग जो SubTest का उदाहरण देता होगा जब कहा जाता है में एक विधि करना चाहते हैं मैं करूंगा करना पसंद:कैसे सुपर क्लास विधि रिटर्न उपवर्ग

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

setTest() और setOtherTest() तरीकों Test कक्षा में होना चाहिए।

लेकिन जब मैं कार्य करें:

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

यह केवल Test का उदाहरण देता है तो मैं SubTest को Test कास्ट करने के लिए है, लेकिन मैं नहीं करना चाहती।

क्या यह संभव है? यदि हां, तो कैसे?

धन्यवाद, मिनसक्यूब।

+0

क्या आपकी 'टेस्ट' कक्षा 'अमूर्त' होगी? –

उत्तर

7

एक विधि उसके मालिक (this) के लिए 'श्रृंखला की एक से अधिक विधि कॉल सक्षम होने के लिए लौटने के बाद धाराप्रवाह एपीआई कहा जाता है। तुम्हें पता है, जेनरिक का उपयोग करके अपनी समस्या का समाधान कर सकते हैं, हालांकि, जिसके परिणामस्वरूप कोड हालांकि किसी भी तरह कम पठनीय हो सकता है:

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

यह भी देखें::

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

अब, आप किसी भी डाले की जरूरत नहीं है Using Generics To Build Fluent API's In Java

+0

सीधे बिंदु पर – pisaruk

0

यह विधियां SubTest लौटाना संभव है, क्योंकि जावा के रिटर्न प्रकार कॉन्वर्सेंट हैं।

आप उन तरीकों को ओवरराइड चाहिए ताकि आप this एक SubTest लौट सकते हैं,, SubTest में, उदाहरण के लिए:

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

क्या मुझे सभी कक्षाओं के लिए सभी विधियों को ओवरराइड करना है? – MinusKube

+0

हां, अन्यथा वे 'टेस्ट' के रूप में टाइप किए गए 'इस' को वापस कर देंगे। कम से कम ओवर्रिडिंग तुच्छ हैं। – rgettman

संबंधित मुद्दे