Array Of Sub-Classes

I have defined a top-level abstract “item” type in my game, like this:

public abstract class GameItem {
   ...
}

And then I have a few concrete implementations, like this:

public class Hammer extends GameItem {
  ...
}

public class Nail extends GameItem {
  ...
}

I then built an “encyclopedia” class that contains a list of all the game assets that are available:

public class Encyclopedia {
  public final GameItem[] items = new GameItem[] {
    new Hammer(),
    new Nail()
  };
}

However, that means that Java is creating an instance of each game item when construction the encyclopedia. What I really want is an array of class references, rather than of class instances, like this:

public class Encyclopedia {
  public final Class<GameItem>[] items = new Class<GameItem>[] {
    Hammer.class,
    Nail.class
  };
}

But that code is not valid.

How can I store an array of subclasses like this?

If this isn’t a good idea, then what is a “good” way to store references to all your game assets? I know I can do it via XML or JSON or something like that, but I’m trying to encapsulate all me game assets in code rather than in data files so that I can take advantage of type checking in my IDE, and also avoid the overhead of parsing and processing XML or JSON data. Plus, there will be code associated with each game item, which makes storing the game assets as data less than ideal.