Не видя фактического определения рассматриваемого класса, мы можем только догадываться, что у класса может не быть открытого конструктора по умолчанию (без параметров).
На самом деле проблема в том, что вы пытаетесь получить конструктор класса Class
вместо реального класса:
final Class myClass = myClassLoader.loadClass(classNameToBeLoaded);
// create a new instance
final Constructor cons = demo.class.getConstructor();......(1)
Вместо этого вызов метода в последней строке должен быть myClass.getConstructor()
: myClass
относится к объекту типа Class
, который является токеном класса для вашего demo
класса. Таким образом, myClass.class
относится к токену класса myClass
, который сам является классом Class
. Который действительно не имеет открытых конструкторов, так как он не предназначен для реализации именно так.
Кстати, класс или переменная final
не имеют ничего общего с отражением или проблемами загрузки классов. Вы всегда можете загрузить класс при условии, что он найден в classpath, является открытым и имеет открытый конструктор (хотя, если конструктор имеет параметры, он немного сложнее, чем ваш код выше).