These are chat archives for rus-speaking/android-off-topic

11th
Jun 2016
Ivan Tretyak
@ivantretyak
Jun 11 2016 10:54
@Lucky-spirit хм) я имел в виду что чужие креши скорее всего будут прилетать, но только если кто-то будет пользоваться твоим кодом. В чужом проекте не покатит.
Yevhen
@Lucky-spirit
Jun 11 2016 14:15
Ребята, по generic'ам кто-то может помочь разобраться? Можно ли как-то написать подобный код, только правильно?
public class Container<T extends Container.IFoo & Container.IBar> {

    private List<T> mList;

    public Container() {
        mList = new ArrayList<MultiInterfacesClass>();
    }

    public List<IFoo> getIFooList() {
        return mList;
    }

    public List<IBar> getIBarList() {
        return mList;
    }

    public interface IFoo {
        void foo();
    }

    public interface IBar {
        void bar();
    }

    public static class MultiInterfacesClass implements IFoo, IBar {


        @Override
        public void bar() {

        }

        @Override
        public void foo() {

        }
    }
}
Не могу понять, в чём ошибка. Ведь класс MultiInterfacesClass имплементирует же оба интерфейса. Почему он не может в этом случае применяться?
И само property mList является же листом с необходимыми объектами. Можете объяснить всё-таки, что да как и возможные варианты решения?
moonsweel
@moonsweel
Jun 11 2016 15:06
а зачем два геттера? почему не List<T> getList() ?
Yevhen
@Lucky-spirit
Jun 11 2016 15:12
Потому что у класса MultiInterfaceClass область видимости совсем другая и адаптер, получающий список с этими элементами, должен ориентироваться только на интерфейс IFoo, а не на саму реализацию класса MultiInterfaceClass.
Вообще мне уже подсказали, как правильнее. Если кому нужно на будущее, то вот ссылка http://ru.stackoverflow.com/questions/534075/%d0%a0%d0%b5%d0%b0%d0%bb%d0%b8%d0%b7%d0%be%d0%b2%d0%b0%d1%82%d1%8c-generic-%d0%b4%d0%bb%d1%8f-%d0%b4%d0%b2%d1%83%d1%85-%d0%b8%d0%bd%d1%82%d0%b5%d1%80%d1%84%d0%b5%d0%b9%d1%81%d0%be%d0%b2
moonsweel
@moonsweel
Jun 11 2016 15:13
@Lucky-spirit ты в List<IFoo> можешь положить объект класса, который имплементит IBar, технически. Компилятор не телепат.
Yevhen
@Lucky-spirit
Jun 11 2016 15:15
@moonsweel , да знаю я, что не телепат. :-D Вот и хотел узнать, как сделать правильно.
moonsweel
@moonsweel
Jun 11 2016 15:16
"не имплементит" я хотел написать.