Как позволять доступ к методам класса только в инстанции класса определенного типа

Я стараюсь ограничивать доступ к методу класса, созданного мной к исключительно инстанциям типа определенного класса, который содержит как поле в мой класс Кустомлист Десео, которые только смогли добавлять элементы к этому CustomList, инстанции конкретного типа класса, который он также считает полем этим CustomList.

Он подумал, что может быть с интерфейсом было возможно делать, но я не был способен это осуществлять.

Схема была бы нечто похожим:

 public class CustomList {
        private List<Evento> lista;

        private void añadirEvento(Evento evento){
        //deseo que sólo puedan acceder a este método las instancia de la clase 
        //Prueba
         lista.add(evento);
    }


public class Prueba{

        private CustomList listaEventos;

        public Prueba(CustomList lista){
        this.listaEventos = lista;
}
  //Deseo que sólo esta clase Prueba pueda llamar al método añadirEvento de CustomList
}
2
задан 20.03.2019, 15:05
3 ответа

Так как ты это комментируешь интерфейса, podrГ-эксперта делать следующее:

public class AppendableCustomList implements CustomList {

    protected List<Evento> lista;

    //no forma parte de la interfaz
    private void añadirEvento(Evento evento) {
     lista.add(evento);
    }

    //Otros métodos que estarán incluidos en la interfaz

}

Класс Тестирует tendrГЎ инстанцию этого класса:

public class Prueba {

    AppendableCustomList MyCustomList = ....
}

Оставшаяся часть классов trabajarГЎ с той же инстанцией..., но она recibirГЎn как интерфейс, который не считает этим mГ©todo:

public OtraClase {

    CustomList cl = getCustomList();
}
1
ответ дан 02.12.2019, 05:22
  • 1
    Я верю в то, что если, что podrí чтобы подавать мне то, что ты предлагаешь перемещая людей, имеющих отношение к другим типам ту же инстанцию в класс как чистый класс и как интерфейс. Большое спасибо из-за вклада. – Jorge 22.03.2019, 20:52

Ты можешь пытаться менять protected модификатор mГ©todo aГ±adirEvento и aГ±adir extends в классе Попытайся.

 public class CustomList {
        private List<Evento> lista;

        protected void añadirEvento(Evento evento){
        //deseo que sólo puedan acceder a este método las instancia de la clase 
        //Prueba
         lista.add(evento);
    }


public class Prueba extends CustomList{

        private CustomList listaEventos;

        public Prueba(CustomList lista){
        this.listaEventos = lista;
}
  //Deseo que sólo esta clase Prueba pueda llamar al método añadirEvento de CustomList
}
1
ответ дан 02.12.2019, 05:22
  • 1
    Podrí чтобы быть solució n vá lida, но tendrí в который создавать класс мост, так как Доказательство должно увеличивать другого класса, но я думаю, что это solució n реальный. Большое спасибо из-за вклада – Jorge 22.03.2019, 20:53

Из-за структурных вопросов Java, модификаторы доступа не позволяют различать между "типом" класса или другой, но он поставляет ограничения относительно того же класса или пакета, которому он принадлежит.

приходят в голову мне два способа осуществлять то, что ты ищешь.

  1. mГ©todo только может быть instanciado, если класс предоставляет один parГЎmetro "Стоивший". В случае, если будет сделана с другого класса, созданная CustomList serГЎ недействительная. Потом serГЎ cuestiГіn делания одной comprobaciГіn, с getter, чтобы получать список и проверять, недействительная ли та же самая.

    public class CustomList 
            {
            public CustomList(String tipo)
            {
            private List<Evento> lista
            if (tipo.equals("Valido"))
                    lista = new List<evento>;
            else
                    lista = null;
            private void añadirEvento(Evento evento){
            lista.add(evento);
            }
    
    public class Prueba
            {
            private CustomList listaEventos = new CustomList("Valido");
            public Prueba(CustomList lista){
            this.listaEventos = lista;
            }
    }
    
  2. , Если ты знаешь, что он не абсолютно сокращен до единственного класса и никогда serГЎ доступно с другой, ты можешь делать это таким образом.

    public class CustomList 
            {
            public CustomList(String clase)
            {
            private List<Evento> lista
            if (clase.equals("Prueba"))
                    lista = new List<evento>;
            else
                    lista = null;
            private void añadirEvento(Evento evento){
            lista.add(evento);
            }
    
    public class Prueba
            {
            private CustomList listaEventos = new CustomList(this.getClass().getSimpleName());
            public Prueba(CustomList lista){
            this.listaEventos = lista;
            }
    }
    
0
ответ дан 02.12.2019, 05:22
  • 1
    Я не уверен, что в моем случае это solució n vá lida, так как Кустомлист será снабженная ссылками в нескольких типах класса в то же время и то, что я желаю, что só тип класса был тем, который может añ adir или удалять элементы в List. Он приходил мне в голову, если quizá было возможно делать это посредством интерфейса, который заставлял бы отпускать событие, которым манипулировал бы класс CustomList для añ adir или удалять элемент, но не, если это правильный способ оплачивать эту проблему – Jorge 21.03.2019, 10:20