Метод getName выдает ошибку «Не удается вызвать getName () для строки типа массива []»?

#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[] который не реализует этот метод.