我正在做一本书中的一些练习,以下练习有些问题。

 package net.mindview.util;

public interface Generator<T> { T next(); } ///:~

    package net.mindview.util;

public class BasicGenerator1<T> implements Generator<T> {

      private Class<T> type;

      public BasicGenerator1(Class<T> type){ this.type = type; }

      public T next() {

        try {

          // Assumes type is a public class:

          return type.newInstance();

        } catch(Exception e) {

          throw new RuntimeException(e);

        }

      }

      // Produce a Default generator given a type token:

      public static <T> Generator<T> create(Class<T> type) {

        return new BasicGenerator1<T>(type);

      }

    } ///:~

package cont;

public class CountedObject {

      private static long counter = 0;

      private final long id = counter++;

      public long id() { return id; }

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

    } ///:~

package cont;

import net.mindview.util.*;



public class BasicGeneratorDemo {

  public static void main(String[] args) {

    //this line works
    //Generator<CountedObject> gen = BasicGenerator1.create(CountedObject.class);

//am stuck here
      Generator<CountedObject> gen = new BasicGenerator1<CountedObject>;

    for(int i = 0; i < 5; i++)

      System.out.println(gen.next());

  }

}


我必须更改BasicGeneratorDemo.java,以便它使用显式构造函数而不是通用的create()方法。我该如何实现?

谢谢

最佳答案

好的,您需要传递一个参数:

Generator<CountedObject> gen = new BasicGenerator1<CountedObject>(CountedObject.class);

关于java - 使用构造函数基于参数化的父类(super class)创建Generator,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9581545/

10-11 22:37
查看更多