Использование конструктора для создания генератора на основе параметризованного суперкласса - PullRequest
0 голосов
/ 06 марта 2012

Я выполняю упражнение из книги и у меня возникли проблемы со следующим упражнением.

 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 (). Как мне этого добиться?

Спасибо

1 Ответ

1 голос
/ 06 марта 2012

ОК, вам нужно передать аргумент:

Generator<CountedObject> gen = new BasicGenerator1<CountedObject>(CountedObject.class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...