#java
#java
Вопрос:
Я новичок в Java и пытаюсь написать простой код для тестирования как getName, так и componentType в одном коде, подобном этому
package class_getcomponenttype;
import java.lang.*;
public class example {
public static void main(String[] args) {
String[] arr = new String[] {"admin"};
Class arrClass = arr.getClass();
Class componentType = arrClass.getComponentType();
if (componentType != null) {
System.out.println(arr.getClass().getName() " " arr.getName());
System.out.println("ComponentType = " componentType.getName());
} else {
System.out.println("ComponentType is null");
}
}
}
Когда я запустил этот код, он сказал мне, что у меня проблема в строке System.out.println(arr.getClass().getName() " " arr.getName());
и проблема в том, что
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Cannot invoke getName() on the array type String[]
at class_getcomponenttype.example.main(example.java:15).
Насколько я понимаю, я мог бы использовать getName для получения имени объекта, представленного Class object, в виде строки или чего-то подобного. Так что я не понимаю , почему у меня эта ошибка?
Извините за мою ошибку, потому что я все еще новичок. Не могли бы вы, пожалуйста, дать мне несколько предложений? Большое вам спасибо.
Комментарии:
1. что вы ожидаете
arr.getName()
вернуть или сделать? Ни в массивах, ни в строках нет метода с именемgetName()
, который вы могли бы вызвать для них.2. @OHGODSPIDERS: Спасибо за ваш комментарий. Теперь я мог понять, почему мой код получил эту ошибку, но когда я удаляю
arr.getName()
, он печатается[Ljava.lang.String;
в 1-й строке, и я подумал, что getClass создал java.lang, но я все еще не понимаю, почему «getName» сделал «String»? Не могли бы вы, пожалуйста, дать мне несколько идей? Спасибо за ваш комментарий.3.
[Ljava.lang.String;
это просто имя класса дляString[]
(массива строк). ДляInteger[]
вы получили бы[Ljava.lang.Integer;
etc. pp .. Теперь, если вы хотите знать, почему классы массива имеют эти типы имен (начинающиеся с «[L»), вам нужно спросить людей, которые разработали и указали язык Java.
Ответ №1:
Объект типа String[]
не имеет метода getName()
Итак, ваша строка
System.out.println(arr.getClass().getName() " " arr.getName());
приводит к ошибке компиляции из-за того, что arr.getName()
as arr
вводится как String[]
который не реализует этот метод.