美文网首页
用于匿名内部类的泛型

用于匿名内部类的泛型

作者: 呆呆李宇杰 | 来源:发表于2017-09-10 19:01 被阅读118次

匿名内部类

泛型还可以使用于内部类和匿名内部类。

class Customer {
    private static long counter = 1;
    private final long id = counter++;

    private Customer() {

    }

    public String toString() {
        return "Customer " + id;
    }

    public static Generator<Customer> generator() {
        return new Generator<Customer>() {
            @Override
            public Customer next() {
                return new Customer();
            }
        };
    }
}

class Teller {
    private static long counter = 1;
    private final long id = counter++;

    private Teller() {
    }

    public String toString() {
        return "Teller " + id;
    }

    public static Generator<Teller> generator = new Generator<Teller>() {
        @Override
        public Teller next() {
            return new Teller();
        }
    };
}


public class BankTeller {
    public static void serve(Teller t, Customer c) {
        System.out.println(t + " serves " + c);
    }

    public static void main(String[] args) {
        Random rand = new Random(47);
        Queue<Customer> line = new LinkedList<>();
        Generators.fill(line, Customer.generator(), 15);
        List<Teller> tellers = new ArrayList<>();
        Generators.fill(tellers, Teller.generator, 4);
        for (Customer c : line) {
            serve(tellers.get(rand.nextInt(tellers.size())), c);
        }
    }
}
// Outputs
Teller 3 serves Customer 1
Teller 2 serves Customer 2
Teller 3 serves Customer 3
Teller 1 serves Customer 4
Teller 1 serves Customer 5
Teller 3 serves Customer 6
Teller 1 serves Customer 7
Teller 2 serves Customer 8
Teller 3 serves Customer 9
Teller 3 serves Customer 10
Teller 2 serves Customer 11
Teller 4 serves Customer 12
Teller 2 serves Customer 13
Teller 1 serves Customer 14
Teller 1 serves Customer 15

上面的CustomerTeller都通过使用匿名内部类实现了Generator接口,并且他们都只有private的构造器,这就意味着要想创建这两个类的对象,必须使用generator方法。其中,Customer类的generator()方法每次调用都会返回一个新的Generator<Customer>对象,但我们其实并不需要多个Generator对象。这时,就可以像Teller类一样,只创建一个publicgenerator对象。在main方法中,这两种创建Generator对象的方法在fill()中都用到了。

由于Customer中的generator()方法,以及Teller中的Generator对象都声明成static,所以它们都无法作为接口的一部分,因此不能用接口这种特定的惯用法来泛化这两者。尽管如此,它们在fill()方法中都工作得很好。(//TODO 看不懂)

相关文章

  • 用于匿名内部类的泛型

    匿名内部类 泛型还可以使用于内部类和匿名内部类。 上面的Customer和Teller都通过使用匿名内部类实现了G...

  • 2020Android面试学习

    Java String 有多长? 匿名内部类 泛型 获取泛型 onActivityResult使用很麻烦,为什么不...

  • Gson 解析小技巧

    解析 List 的时候官方的使用: 使用TypeToken 匿名内部类的方式.获取到匿名内部类定义的泛型. 当我们...

  • Java泛化的小问题的理解

    Thinking in Java中有一段内容如下: 用于匿名内部类的泛型 在文章的最后一段: 什么意思呢?Java...

  • Day12_22

    容器--Map(键值对) 最具逼格的冒泡排序 lambda表达式,匿名内部类的使用 泛型的使用

  • Dart匿名函数+泛型

    匿名函数使用 无参数的匿名函数 带参数的匿名函数 函数体只有一行时,简写 泛型的基本使用 泛型集合 泛型类 泛型方法

  • 内部类

    成员内部类 局部内部类(定义在方法内和定义在作用域内的类) 匿名内部类

  • Java匿名内部类

    导语 学完匿名内部类就懂的情书。 主要内容 接口与抽象类和匿名内部类的关系 具体内容 匿名内部类也就是没有名字的内...

  • java中的匿名内部类总结

    匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内...

  • Java 内部类

    内部类包括成员内部类、方法内部类、*静态内部类、匿名内部类*。 内部类的作用 由于内部类的实现和外部类没有关系,内...

网友评论

      本文标题:用于匿名内部类的泛型

      本文链接:https://www.haomeiwen.com/subject/orstsxtx.html