vendredi 13 avril 2018

Class registration using reflection

I'm learning about Factory Pattern and I am using THIS article as a source. In it, there is this piece of code:

class ProductFactory {
  private HashMap m_RegisteredProducts = new HashMap();

  public void registerProduct (String productID, Class productClass) {
    m_RegisteredProducts.put(productID, productClass);
  }

  public Product createProduct(String productID) {
    Class productClass = (Class)m_RegisteredProducts.get(productID);
    Constructor productConstructor = cClass.getDeclaredConstructor(new Class[] { String.class });
    return (Product)productConstructor.newInstance(new Object[] { });
  }
}

I'm having a hard time figuring out how createProduct() method works. When I'm trying to use this code I get Non-static method `getDeclaredConstructor(java.lang.Class<?>...)' cannot be referenced from a static context error. productClass variable is declared but never used so there is clearly something wrong with the code but I can't figure what exactly. I checked similar questions on SO but don't know how to repurpose them for this case. Reflection is a really confusing subject for me.

My questions:

  1. What is wrong with this code?
  2. Why it is passing new Class[] { String.class } in getDeclaredConstrutor() method and what does it mean?
  3. Why is it passing Object array in newInstance() instead of just single object?




Aucun commentaire:

Enregistrer un commentaire