{"id":306,"date":"2013-09-30T12:05:44","date_gmt":"2013-09-30T12:05:44","guid":{"rendered":"http:\/\/www.andreagirardi.it\/blog\/?p=306"},"modified":"2014-01-22T14:23:04","modified_gmt":"2014-01-22T14:23:04","slug":"how-to-call-a-function-whose-name-is-stored-in-a-string-variable","status":"publish","type":"post","link":"https:\/\/www.andreagirardi.it\/blog\/how-to-call-a-function-whose-name-is-stored-in-a-string-variable\/","title":{"rendered":"How to call a function whose name is stored in a string variable"},"content":{"rendered":"<p>The objective is simple, create a method which load a class dynamically, access its method and passing their parameters value and getting the return value at run-time. To do that is possible to use Java reflection.<\/p>\n<pre lang=\"java\">\r\ntry {\r\n\tClass<?> clazz = Class.forName(\"package.myclass\");\r\n\tMethod mth = clazz.getDeclaredMethod(\"method\", String.class, String.class);\r\n\tObject source_class = clazz.newInstance(); \r\n}\r\ncatch (SecurityException ex) {\t\t\t\t\r\n\treturn null;\r\n}\r\ncatch (NoSuchMethodException ex) {\r\n\treturn null;\r\n}\r\ncatch (IllegalArgumentException ex) {\r\n\treturn null;\r\n} \r\ncatch (IllegalAccessException ex) {\r\n\treturn null;\r\n} \r\ncatch (InvocationTargetException ex) {\r\n\treturn null;\r\n}\r\n\r\nlogger.debug((String) mth.invoke(source_class, \"Param1\", \"Test ${medicationGenericName}\"));<\/pre>\n<p>In this case the method needs two string as parameter and returns a string. <\/p>\n<p>If the constructor of the class needs a parameter (i.e. the application context because the @Autowired doesn&#8217;t works), this is the code needed:<\/p>\n<pre lang=\"java\">\r\nClass<?> clazz = Class.forName(\"package.myclass\");\r\nConstructor <?> constructor = clazz.getDeclaredConstructor(ApplicationContext.class);\r\nMethod mth = clazz.getDeclaredMethod(\"method\", String.class, String.class);\t\t\t\t\r\nObject source_class = constructor.newInstance(applicationContext); \r\n<\/pre>\n<div class=\"sharedaddy sd-sharing-enabled\"><div class=\"robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing\"><h3 class=\"sd-title\">Share this:<\/h3><div class=\"sd-content\"><ul><li class=\"share-linkedin\"><a rel=\"nofollow\" data-shared=\"sharing-linkedin-306\" class=\"share-linkedin sd-button share-icon\" href=\"https:\/\/www.andreagirardi.it\/blog\/how-to-call-a-function-whose-name-is-stored-in-a-string-variable\/?share=linkedin\" target=\"_blank\" title=\"Click to share on LinkedIn\"><span>LinkedIn<\/span><\/a><\/li><li class=\"share-reddit\"><a rel=\"nofollow\" data-shared=\"\" class=\"share-reddit sd-button share-icon\" href=\"https:\/\/www.andreagirardi.it\/blog\/how-to-call-a-function-whose-name-is-stored-in-a-string-variable\/?share=reddit\" target=\"_blank\" title=\"Click to share on Reddit\"><span>Reddit<\/span><\/a><\/li><li class=\"share-twitter\"><a rel=\"nofollow\" data-shared=\"sharing-twitter-306\" class=\"share-twitter sd-button share-icon\" href=\"https:\/\/www.andreagirardi.it\/blog\/how-to-call-a-function-whose-name-is-stored-in-a-string-variable\/?share=twitter\" target=\"_blank\" title=\"Click to share on Twitter\"><span>Twitter<\/span><\/a><\/li><li class=\"share-facebook\"><a rel=\"nofollow\" data-shared=\"sharing-facebook-306\" class=\"share-facebook sd-button share-icon\" href=\"https:\/\/www.andreagirardi.it\/blog\/how-to-call-a-function-whose-name-is-stored-in-a-string-variable\/?share=facebook\" target=\"_blank\" title=\"Click to share on Facebook\"><span>Facebook<\/span><\/a><\/li><li class=\"share-skype\"><a rel=\"nofollow\" data-shared=\"sharing-skype-306\" class=\"share-skype sd-button share-icon\" href=\"https:\/\/www.andreagirardi.it\/blog\/how-to-call-a-function-whose-name-is-stored-in-a-string-variable\/?share=skype\" target=\"_blank\" title=\"Share on Skype\"><span>Skype<\/span><\/a><\/li><li class=\"share-pocket\"><a rel=\"nofollow\" data-shared=\"\" class=\"share-pocket sd-button share-icon\" href=\"https:\/\/www.andreagirardi.it\/blog\/how-to-call-a-function-whose-name-is-stored-in-a-string-variable\/?share=pocket\" target=\"_blank\" title=\"Click to share on Pocket\"><span>Pocket<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>The objective is simple, create a method which load a class dynamically, access its method and passing their parameters value and getting the return value at run-time. To do that is possible to use Java reflection. try { Class clazz = Class.forName(&#8220;package.myclass&#8221;); Method mth = clazz.getDeclaredMethod(&#8220;method&#8221;, String.class, String.class); Object source_class = clazz.newInstance(); } catch (SecurityException [&hellip;]<\/p>\n<div class=\"sharedaddy sd-sharing-enabled\"><div class=\"robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing\"><h3 class=\"sd-title\">Share this:<\/h3><div class=\"sd-content\"><ul><li class=\"share-linkedin\"><a rel=\"nofollow\" data-shared=\"sharing-linkedin-306\" class=\"share-linkedin sd-button share-icon\" href=\"https:\/\/www.andreagirardi.it\/blog\/how-to-call-a-function-whose-name-is-stored-in-a-string-variable\/?share=linkedin\" target=\"_blank\" title=\"Click to share on LinkedIn\"><span>LinkedIn<\/span><\/a><\/li><li class=\"share-reddit\"><a rel=\"nofollow\" data-shared=\"\" class=\"share-reddit sd-button share-icon\" href=\"https:\/\/www.andreagirardi.it\/blog\/how-to-call-a-function-whose-name-is-stored-in-a-string-variable\/?share=reddit\" target=\"_blank\" title=\"Click to share on Reddit\"><span>Reddit<\/span><\/a><\/li><li class=\"share-twitter\"><a rel=\"nofollow\" data-shared=\"sharing-twitter-306\" class=\"share-twitter sd-button share-icon\" href=\"https:\/\/www.andreagirardi.it\/blog\/how-to-call-a-function-whose-name-is-stored-in-a-string-variable\/?share=twitter\" target=\"_blank\" title=\"Click to share on Twitter\"><span>Twitter<\/span><\/a><\/li><li class=\"share-facebook\"><a rel=\"nofollow\" data-shared=\"sharing-facebook-306\" class=\"share-facebook sd-button share-icon\" href=\"https:\/\/www.andreagirardi.it\/blog\/how-to-call-a-function-whose-name-is-stored-in-a-string-variable\/?share=facebook\" target=\"_blank\" title=\"Click to share on Facebook\"><span>Facebook<\/span><\/a><\/li><li class=\"share-skype\"><a rel=\"nofollow\" data-shared=\"sharing-skype-306\" class=\"share-skype sd-button share-icon\" href=\"https:\/\/www.andreagirardi.it\/blog\/how-to-call-a-function-whose-name-is-stored-in-a-string-variable\/?share=skype\" target=\"_blank\" title=\"Share on Skype\"><span>Skype<\/span><\/a><\/li><li class=\"share-pocket\"><a rel=\"nofollow\" data-shared=\"\" class=\"share-pocket sd-button share-icon\" href=\"https:\/\/www.andreagirardi.it\/blog\/how-to-call-a-function-whose-name-is-stored-in-a-string-variable\/?share=pocket\" target=\"_blank\" title=\"Click to share on Pocket\"><span>Pocket<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><\/div><\/div><\/div>","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"footnotes":""},"categories":[14],"tags":[4],"_links":{"self":[{"href":"https:\/\/www.andreagirardi.it\/blog\/wp-json\/wp\/v2\/posts\/306"}],"collection":[{"href":"https:\/\/www.andreagirardi.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.andreagirardi.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.andreagirardi.it\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.andreagirardi.it\/blog\/wp-json\/wp\/v2\/comments?post=306"}],"version-history":[{"count":7,"href":"https:\/\/www.andreagirardi.it\/blog\/wp-json\/wp\/v2\/posts\/306\/revisions"}],"predecessor-version":[{"id":316,"href":"https:\/\/www.andreagirardi.it\/blog\/wp-json\/wp\/v2\/posts\/306\/revisions\/316"}],"wp:attachment":[{"href":"https:\/\/www.andreagirardi.it\/blog\/wp-json\/wp\/v2\/media?parent=306"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.andreagirardi.it\/blog\/wp-json\/wp\/v2\/categories?post=306"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.andreagirardi.it\/blog\/wp-json\/wp\/v2\/tags?post=306"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}