Creating instance of generic objects

You are browsing legacy Javonet 1.5 (Java<>.NET bridge for Windows) documentation. Use the left side menu or click here to switch to latest Javonet 2.0 documentation. Javonet 2.0 allows you to use any module from JVM, CLR, Netcore, Python, Ruby, Perl, NodeJS on Windows, Linux and MacOs from any application created in Java, Clojure, Groovy, Kotlin, C#, F#, J#, VB.NET, Python, Perl, Ruby, JavaScript, TypeScript, C++ and GoLang

Javonet allows you to create instances of generic objects. To initialize generic class first type with expected generic type should be created. Next to initialize the instance of generic type call the "create()" method on the object.

Important Notice that while initializing NType for generic class there is apostrophe with number of generic arguments provided which let's Javonet recognize which generic class should be initialized. For example for List class, the List can be obtained by calling Javonet.getType("List`1","String"). As first argument we provide generic type name and number of generic arguments and as second argument the name of the type to be used as generic type. If class expects more then one generic type they should be passed as further arguments of getType method.

To create instance of generic class:

I code in:

        // how to create instance of .NET generic class Dictionary<String,List<String>>
        // Todo: activate Javonet

        // initialize List <String> type
        NType typeList = Javonet.getType("List`1", "String");

        // get String type
        NType typeString = Javonet.getType("String");

        // initialize Dictionary<String,List<String>> type
        NType type = Javonet.getType("Dictionary`2", typeString, typeList);

        // create instance of generic Dictionary
        NObject newDict = type.create();

        // create instance of generic List
        NObject newList = typeList.create();

        // add items to generic list
        newList.invoke("Add", "a");
        newList.invoke("Add", "b");

        // add items to generic Dictionary passing string as key and generic List as value
        newDict.invoke("Add", "List1", newList);
        newDict.invoke("Add", "List2", newList);

        // Retrieve dictionary item by string key
        NObject result = newDict.getIndex("List1");

        // Display second item from generic List retrieved from dictionary
        System.out.println((String) result.getIndex(1)); //displays "b"

See Live Example!