मैं की तरह एक अंतरफलक है निम्नलिखित:जावा: आंतरिक enums युक्त इंटरफेस; कार्यान्वयन की कक्षाओं में विस्तार कार्यक्षमता
package example;
import java.awt.Point;
public interface Thing {
public enum MovingState {
MOVING_LEFT,
MOVING_UP,
MOVING_RIGHT,
MOVING_DOWN
}
public void setNewPosition(MovingState state);
public Point getPosition();
}
और एक कार्यान्वयन वर्ग:
package example;
import java.awt.Point;
public class ThingImpl implements Thing {
public enum MovingState {
MOVING_LEFT (-1, 0),
MOVING_UP (0, -1),
MOVING_RIGHT (1, 0),
MOVING_DOWN (0, 1);
private int x_move;
private int y_move;
MovingState(int x, int y) {
x_move = x;
y_move = y;
}
public int xMove() {
return x_move;
}
public int yMove() {
return y_move;
}
}
private Point position;
public void setNewPosition(MovingState state) {
position.translate(state.xMove(), state.yMove());
}
public Point getPosition() {
return position;
}
}
विचार ThingImpl
में MovingState
Thing
इंटरफ़ेस से MovingState
का विस्तार (इस प्रकार है इंटरफ़ेस से MovingState
के वास्तविक कार्यान्वयन को अलग करना)।
यह हालांकि काम नहीं करता है - ThingImpl
छाया बजाय इसे विस्तार के इंटरफेस में परिभाषा MovingState
enum, तो संकलक शिकायत है कि ThingImpl सार नहीं है और में सार विधि setNewPosition (Thing.MovingState) पर हावी नहीं होता चीज़।
क्या मैं ऐसा करने का प्रयास कर रहा हूं जो मैं प्राप्त करने की कोशिश कर रहा हूं? या जावा में बस यह क्षमता नहीं है?
-1 - आप सही नहीं, वह नहीं विरोधी पैटर्न कर रहा है कर रहे हैं। वह जो कर रहा है वह बेवकूफ है, लेकिन यह लगातार इंटरफ़ेस पैटर्न नहीं है क्योंकि उसका इंटरफ़ेस * व्यवहार को परिभाषित करता है *, और निरंतर मान रखने के लिए काम नहीं करता है। इंटरफेस पर स्थिरांक को परिभाषित करना ठीक है IFF का उपयोग इंटरफेस के व्यवहार के साथ किया जाना चाहिए। – MetroidFan2002
हाँ मुझे लगता है कि यह सही है और मैं वोट के लायक हूं। हालांकि, दृष्टिकोण गलत दिशा में एक कदम है और मैं (संभवतः एक अमूर्त वर्ग में डाल दिया) अभी भी अच्छा है ... – hvgotcodes
उन्होंने कहा कि कर सकता है तरीकों में अपने MOVING_LEFT प्रकार स्थिरांक करते समय, के बारे में मेरी सलाह है, लेकिन फिर उसके इंटरफेस लगता है अगर वह वास्तव में अतिरिक्त दिशाओं को जोड़ना चाहता है तो वह भुगतेंगे। बाएं तरफ ऊपर तिरछे कदम के बारे में क्या? यह एक और तरीका है, लेकिन सिर्फ एक अतिरिक्त गणना निरंतर है। आप यहां तक कि अधिक गूढ़ enums भी बना सकते हैं - ऊपर, ऊपर, नीचे ले जाएँ। प्रत्येक को एक अलग विधि के रूप में लागू करने के बाद इंटरफेस गुब्बारा बनाता है। – MetroidFan2002