2016-08-21 9 views
6

से सार विधि को लागू करने वाले उप वर्ग को संकलित नहीं कर सकता है, जिसे मैंने परिभाषित किया है कि बेस क्लास के उप वर्गों को संकलित करने में समस्याएं हैं जिनमें एक ही विधि है और प्रत्येक उप वर्ग सार आधार विधि लागू करती है, लेकिन जावैक कह रहा है कि वे उप वर्ग में स्पष्ट रूप से परिभाषित नहीं होने के बावजूद भी नहीं करते हैं।बेस क्लास

DbModel.java (आधार वर्ग)

package com.manodestra.db; 

import java.sql.ResultSet; 
import java.sql.SQLException; 

public abstract class DbModel<T extends DbModel> extends Model { 
    abstract T newInstance(ResultSet rs) throws SQLException; 
} 

DbModel मॉडल है, जो केवल एक सामान्य toString विधि है फैली हुई है।

MenuPermissions.java (उप वर्ग)

package com.manodestra.csa.db.model.configNew; 

import com.manodestra.db.DbModel; 
import java.sql.Date; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Time; 
import java.sql.Timestamp; 

public class MenuPermissions extends DbModel<MenuPermissions> { 
    private final String menuId; 
    private final String userLevel; 

    public MenuPermissions(
     String menuId, 
     String userLevel 
    ) { 
     this.menuId = menuId; 
     this.userLevel = userLevel; 
    } 

    public String getMenuId() { 
     return this.menuId; 
    } 

    public String getUserLevel() { 
     return this.userLevel; 
    } 

    public MenuPermissions newInstance(ResultSet rs) throws SQLException { 
     return new MenuPermissions(
      rs.getString("menu_id"), 
      rs.getString("user_level") 
     ); 
    } 
} 

संकलन त्रुटि

[javac] Compiling 487 source files to C:\Media\Code\manodestra_java\bin 
[javac] C:\Media\Code\manodestra_java\src\com\manodestra\csa\db\model\configNew\MenuPermissions.java:10: 
error: MenuPermissions is not abstract 
and does not override abstract method newInstance(ResultSet) in DbModel 
[javac] public class MenuPermissions extends DbModel<MenuPermissions> { 
[javac]  ^

किसी को भी देखते हैं कि क्या समस्या यहाँ है? मुझे लगता है कि मैं कुछ सचमुच सरल दिख रहा हूं। आवश्यकताओं पर

आगे की जानकारी:

मैं एक इकाई रूपरेखा है कि किसी दिए गए डेटाबेस से मॉडल वस्तुओं उत्पन्न निर्माण कर रहा हूँ। उपरोक्त मेनू पैरामिशन एक ऐसा मॉडल ऑब्जेक्ट है (जेनरेट मॉडल नामक एक वर्ग द्वारा स्वतः उत्पन्न)। मैं चाहता हूं कि प्रत्येक मॉडल में एक विधि हो जो मुझे परिणामपत्र के आधार पर प्रत्येक objecct प्रकार का एक नया उदाहरण प्राप्त करने की अनुमति देगी, जो ऑब्जेक्ट को तदनुसार पॉप्युलेट करेगा और इसे वापस कर देगा। आदर्श रूप में, यह एक स्थिर विधि होनी चाहिए, लेकिन मैंने इस पल के लिए एक ठोस विधि के रूप में कोशिश की है क्योंकि मुझे डीबीमोडेल के प्रत्येक उप वर्ग में अपने अस्तित्व को लागू करने की आवश्यकता है। उम्मीद है कि समझ में आता है।

+5

आपकी सार विधि में पैकेज पहुंच है, मुझे नहीं पता कि इसका उद्देश्य – peter

+0

@ लेज़र हाँ था। .. इसे एक उत्तर के रूप में पोस्ट करें। थम्स अप। – Mordechai

+0

ओवरराइड करते समय एक्सेस स्तर को बढ़ाया जा सकता है: [Ideone] (http://ideone.com/fIWznf) –

उत्तर

6

आपकी अमूर्त विधि newInstance में पैकेज का उपयोग है, मुझे नहीं पता कि यह इरादा था, लेकिन यदि यह एक अलग पैकेज में है तो आपको एक त्रुटि मिलेगी।

संपादित करें:

तो माता-पिता कक्षा में सार विधि के बाद से यह एक public घोषित नहीं किया गया है हल नहीं किया जा सकता है। संभव उपाय public को विधि परिभाषा में जोड़ना है या बच्चे वर्ग को मूल वर्ग के समान पैकेज में स्थानांतरित करना है :- डी

+0

क्या आप इसे सही करने के तरीके पर विस्तृत कर सकते हैं? मुझे जेनरेटेड क्लास को एक अलग पैकेज में होना चाहिए। मैंने उन्हें एक ही पैकेज में रखने की कोशिश की है और यह ठीक काम करता है, लेकिन यह मेरे लिए अच्छा नहीं है। – ManoDestra

+2

@ManoDestra बस डालें, अमूर्त विधि 'संरक्षित' बनाएं। – Mordechai

+0

आह, समझ गया। बेवकूफ स्कूली लड़का त्रुटि। इसे सार्वजनिक बनाना इसे ठीक करता है। धन्यवाद। – ManoDestra