



Итак, Class<?> c будет ссылаться на объект класса String типа. В Class<?> c в основном есть metadata о классе String.
String s = "hello";
Class<?> c = s.getClass();
String s1 = (String) c.newInstance();
Отредактировано:
Итак, в объекте Class доступно несколько методов для получения информации о классе:
Class#getName() //the name of the class or interface represented by this object with package name
Class#getSimpleName() // returns only the name of the Class
Например:
String s = "hello";
Class<?> c = s.getClass();
System.out.println("Name : "+c.getName());
System.out.println("Simple Name: "+c.getSimpleName());
System.out.println("Canonical Name: "+c.getCanonicalName());
System.out.println("Type Name : "+c.getTypeName());
Вы получите результат:
Name : java.lang.String
Simple Name: String
Canonical Name: java.lang.String
Type Name : java.lang.String
Примечание. Поскольку вы можете видеть то же самое возвращаемое значение, которое вы получаете для разных методов (например, getCanonicalName, getCanonicalName и т. д.), Может быть не всегда одинаково знать разницу, пожалуйста, ссылку, которую я предоставил ниже.
Вдобавок к этому есть несколько методов, доступных для объекта Class, чтобы получить metadata information о class. Пожалуйста, следуйте документы для получения дополнительной информации.
.getName() помог вместо использования .getClass() Спасибо!
Обратите внимание, что Class.newInstance() сегодня устарел. Constructor.newInstance() - рекомендуемый способ.
Во-первых: вы можете получить экземпляр класса из объекта, поскольку экземпляр класса связан с классом (тогда как наличие метода getClass() в классе Object), но он не работает другим способом, поскольку класс не связанный с конкретным экземпляром.
Во-вторых: чтобы получить тип, вам все равно, указан ли неограниченный подстановочный знак в объявленном типе Class, поскольку универсальные шаблоны стираются во время выполнения.
Важно то, что информация о классе, связанном (здесь String) с объектом Class, известна самому объекту Class.
Так, например, вы можете написать одно или второе:
Class<? extends String> c = s.getClass();
Class<?> c = s.getClass();
И в любом случае вы сможете получить тип String при вызове:
String typeName = c.getTypeName(); // --> java.lang.String
String name = c.getName(); // --> java.lang.String
Нет, мне нужна информация о том, что за Type стоит. Я вообще-то не знаю, что это
String.