"exporting non-public type through public API"



  • Kann mir jemand sagen, wieso ich die im Titel stehende Fehlermeldung erhalte? Ich weiß, dass ich die Meldung vermeiden kann, indem ich das enum XCodePosition public mache, aber das möchte ich nicht.

    package de.dumdidum;
    
    import java.util.Vector;
    
    public class Area2D
    {
        private double x = 0;
        private double y = 0;
        private double width = 0;
        private double height = 0;
        private String name = "";
        private String fileName = "";
    
        private enum XCodePosition
        {
            TOPLEFT, TOPRIGHT, BOTTOMLEFT, BOTTOMRIGHT, CENTER, NONE
        }
    
        // create vector of Area2D objects
        private static Vector<Area2D> list = new Vector<Area2D>();
    
        /***************************************************************************
        * constructor
        ***************************************************************************/
    
        public Area2D(double _x, double _y,
                      double _width, double _height,
                      String _name, String _fileName, XCodePosition _qrcodeposition)
        {
            x = _x;
            y = _y;
            width = _width;
            height = _height;
            name = _name;
            fileName = _fileName;
        }
    
        /***************************************************************************
        * get methods
        ***************************************************************************/
    
        public double getX()
        {
           return x;
        }
    
        public double getY()
        {
            return y;
        }
    
        public double getWidth()
        {
            return width;
        }
    
        public double getHeight()
        {
            return height;
        }
    
        public String getName()
        {
            return name;
        }
    
        public String getFileName()
        {
            return fileName;
        }
    
        private static Vector<Area2D> getList()
        {
            return list;
        }
    
        public static Area2D getArea(int _i)
        {
            return getList().get(_i);
        }
    
        public static int getAreaCount()
        {
            return getList().size();
        }
    
        /***************************************************************************
        * set methods
        ***************************************************************************/
    
        public void setX(double _x)
        {
            x = _x;
        }
    
        public void setY(double _y)
        {
            y = _y;
        }
    
        public void setWidth(double _width)
        {
            width = _width;
        }
    
        public void setHeight(double _height)
        {
            height = _height;
        }
    
        public void setName(String _name)
        {
            name = _name;
        }
    
        public void setFileName(String _fileName)
        {
            fileName = _fileName;
        }
    
        /***************************************************************************
         * other methods area
         **************************************************************************/
    
        public static void addArea(double _x, double  _y,
                               double _width, double _height,
                               String _name, String _fileName, XCodePosition _xcodeposition)
        {
            getList().add(new Area2D(_x, _y, _width, _height, _name, _fileName, _xcodeposition));
        }
    }
    

  • Mod

    Der Area2D-Konstruktor und die addArea-Methode sind beide public und benötigen eine XCodePosition als Parameter. Da XCodePosition aber private ist, ist das praktisch ein Widerspruch: Die Stellen, von denen der Konstruktor bzw. die Methode aufgerufen werden können, haben im Allgemeinen keinen Zugang zu XCodePosition. Die kennen diesen Enum-Typ einfach nicht. Du kannst also zum Beispiel Konstruktor und Methode auch private machen, um das Problem zu lösen. Aber die Frage ist, wie Du dann eine Instanz Deiner Klasse erzeugst. Vielleicht über eine Factory-Methode?


Anmelden zum Antworten