Vraag het klasse-type doorgeven als parameter en er een instantie van maken


Ik wil een klassentype als een parameter doorgeven aan een methode in java.Alle hebben dezelfde constructorfactor.en maken een instantie van die klasse in die methode.is dit mogelijk?


13
2018-04-11 06:20


oorsprong


antwoorden:


Reflectie gebruiken om de instantie te maken:

Object obj = clazz.newInstance();

Hiermee wordt de standaard gebruikt no-arg constructor om het exemplaar te maken.

Constructor<?> constructor = clazz.getConstructor(String.class);
Object object = constructor.newInstance(new Object[] { strArgument });

De instantie maken als u een andere constructor hebt die argumenten gebruikt.


16
2018-04-11 06:23



Je moet reflectie gebruiken om dat te doen, maar ja het is zeker mogelijk.

void MyMethod(Class className)
{
    try {
        Object obj = className.newInstance();
        //obj is a newly created object of the passed in type
    }
    catch (Exception ex) { }
}

3
2018-04-11 06:21



U bent op zoek naar Reflectie.

Uw methode ziet er ongeveer zo uit:

public void m1(Class c) {

      try {
        Object obj = c.newInstance();
        //do something with your new instance
    } catch (InstantiationException ex) {

    } catch (IllegalAccessException ex) {

    }
}

Het Oracle-document voor de Reflection-API is hier


2
2018-04-11 06:23



Ja dat kan

void x(Class cls) throws InstantiationException, IllegalAccessException {
    cls.newInstance();
}

Merk op dat Class.newInstance mislukt met

IllegalAccessException - als de klasse of de nullary-constructor niet toegankelijk is.

InstantiationException - als deze klasse een abstracte klasse, een interface, een arrayklasse, een primitief type of ongeldig vertegenwoordigt; of als de klasse geen nul-constructor heeft; of als de instantiatie om een ​​andere reden faalt.

zie API voor meer


1
2018-04-11 06:27