मेरे पास एक ऐसा एप्लिकेशन है जो नोड्स के ग्राफ और किनारों जी (एन, ई) पर विभिन्न विश्लेषण एल्गोरिदम करता है। नोड्स और किनारों के गुण अनुप्रयोग के साथ भिन्न होते हैं और गुणों के ग्राफ और प्रकृति के प्रकार के आधार पर विरासत पदानुक्रम बनाते हैं। उदाहरण के लिए नोड पदानुक्रम की जड़ सबसे सामान्य गैर-निर्देशित चक्रीय ग्राफ (एनसीजीएनओडी) का प्रतिनिधित्व कर सकती है। एनसीजीएनओड का एक उप-वर्ग निर्देशित चक्रीय ग्राफ (डीसीजीएनओडी) का प्रतिनिधित्व कर सकता है, इसके बाद डैग्नोड इत्यादि। डीएजी पर लागू किए जा सकने वाले एल्गोरिदम एनसीजी से अलग हैं, लेकिन वीजा-विपरीत नहीं हैं। पेड़ की जड़ का एक महत्वपूर्ण व्यवहार ग्राफ के आसन्न नोड्स को जोड़ना और पुनर्प्राप्त करना है। प्रश्न यह है कि "अनचेक" अपवाद बनाये बिना इसे कैसे किया जाए?विरासत और जेनेरिक
कोड का एक संक्षिप्त संस्करण इस प्रकार दिखाई देंगे:
import java.util.ArrayList;
import java.util.List;
public class NcgNode {
private List<NcgNode> nodeList_ = null;
private List<? extends NcgNode> nodeListSrc_ = null;
private List<? super NcgNode> nodeListSink_ = null;
public <N extends NcgNode> void addNode(N node) {
if (nodeList_ == null) {
nodeList_ = new ArrayList<NcgNode>();
nodeListSrc_ = nodeList_;
nodeListSink_ = nodeList_;
}
nodeListSink_.add(node);
}
@SuppressWarnings("unchecked")
// Any way to avoid this?
public <N extends NcgNode> N getNode(int n) {
if ((nodeList_ == null) || (n >= nodeList_.size()))
return null;
// causes unchecked warning:
return (N) nodeListSrc_.get(n);
}
}
class DcgNode extends NcgNode {
// enables DCG algorithms, etc
}
class DagNode extends DcgNode {
// enables DAG algorithms, etc.
}
इस डिजाइन करने के लिए एक बेहतर तरीका है? "आत्म घिरा प्रकार" बाहर
public NcgNode getNode(int n) {
if ((nodeList_ == null) || (n >= nodeList_.size())) {
return null;
}
return (NcgNode) nodeListSrc_.get(n);
}
यह समाधान कॉलर को कंक्रीट सबक्लास के विनिर्देशों का उपयोग करने की अनुमति नहीं देता है जो बिना किसी असुरक्षित कलाकार के प्रदर्शन करता है। सड़क को नीचे लात मारना। –