泛型 边界 接口 &

2018-04-17  本文已影响23人  lkuo

先看代码:

public class test1 {
    interface Game {
        void play();
    }

    interface Program {
        void code();
    }

    public static class People<T extends Program & Game> {
        private T mPeople;

        public People(T people) {
            mPeople = people;
        }

        public void habit() {
            mPeople.code();
            mPeople.play();
        }
    }

    public static class Aa implements Program, Game {
        public Aa() {
        }

        @Override
        public void play() {
            System.out.println("Game play!");
        }

        @Override
        public void code() {
            System.out.println("Program code!");
        }
    }

    public static void main(String[] arg1) {
        Aa a = new Aa();
        People<Aa> people = new People<>(a);
        people.habit();
    }
}

可以看到代码中 <T extends Program & Game>这种写法,是指T是实现了Program和Game接口的类,泛型中没有集成接口的说法(没有implements)。

如果没有指明边界,类型参数将被擦除为 Object。
如果我们想要让参数保留一个边界,可以给参数设置一个边界,泛型参数将会被擦除到它的第一个边界(边界可以有多个),这样即使运行时擦除后也会有范围。

上一篇下一篇

猜你喜欢

热点阅读