2013-06-07 18 views
9

मैं एक सामान्य दाओ इंटरफेस लिख रहा हूं और मुझे कुछ समस्याएं आई हैं।जावा - जेनेरिक पैरामीटर को हल नहीं किया जा सकता

मैं निम्नलिखित सामान्य इकाई इंटरफ़ेस

public interface Entity<T> { 

    T getId(); 

    //more code 
} 

तो सामान्य पैरामीटर संस्था की आईडी का प्रतिनिधित्व करने वाले है। और अब मैं इसके बजाय

T find(Object id) 

कॉल करने के लिए जो typesafe नहीं है होने के

T find(E id) 

कॉल करने के लिए सक्षम होने के लिए इस

public interface Dao<T extends Entity<E>> { 

    //more code 

    T find(E id); 

} 

जैसा कोई सामान्य दाव initerface लिखना चाहते हैं।

दुर्भाग्य संकलक

Dao<T extends Entity<E>> 

में ई हल करने आप में से किसी को पता है इस समस्या का एक समाधान नहीं है, या यह सिर्फ जावा में करने के लिए असंभव है अगर करते हैं सक्षम होने के लिए प्रतीत नहीं होता?

उत्तर

10

तुम भी पैरामीटर के रूप में प्राथमिक कुंजी पारित करने के लिए है:

public interface Dao<K, T extends Entity<K>> 

pk आमतौर पर, serializable है ताकि आप ऊपर हस्ताक्षर सुधार कर सकते हैं:

public interface Dao<K extends Serializable, T extends Entity<K>> 

और:

public interface Entity<K extends Serializable> 

फिर:

public class UserDao implements Dao<Integer, User> { 
} 
+0

आईक! 'Serializable' :(बहुत सारे serialization ढांचे को शर्मिंदा करने के लिए इतने सारे हैं कि मैं कभी भी पिछड़ा संगतता को छोड़कर किसी भी व्यक्ति द्वारा लागू इंटरफेस को कभी नहीं देखता ... – fge

+0

मैं देखता हूं, सुझावों के लिए धन्यवाद! – SmokeIT

+0

@fge ने कभी इसके बारे में नहीं सुना बिंदु ... क्या आपके पास कुछ दस्तावेज़/लेख हैं? – sp00m

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