Да, это устарело! Вот некоторые моменты, которые вам понадобятся при использовании нового FusedLocationProviderClient .
com.google.android.gms.location.FusedLocationProviderClient;
Что означает «ILcom» или «Z»?
blockquote>Это типы отображения для собственных типов. Вы можете найти обзор здесь .
Native Type | Java Language Type | Description | Type signature ---------------+--------------------+------------------+---------------- unsigned char | jboolean | unsigned 8 bits | Z signed char | jbyte | signed 8 bits | B unsigned short | jchar | unsigned 16 bits | C short | jshort | signed 16 bits | S long | jint | signed 32 bits | I long long | jlong | signed 64 bits | J __int64 | | | float | jfloat | 32 bits | F double | jdouble | 64 bits | DКроме того, подпись
blockquote>"L fully-qualified-class ;"
будет означать класс, однозначно указанный этим именем; например, подпись"Ljava/lang/String;"
относится к классуjava.lang.String
. Кроме того, префикс[
для подписи создает массив этого типа; например,[I
означает тип массива int.
Что касается вашего следующего вопроса:
Почему существует четыре типа в скобках (ILcom / sun / javadoc / ClassDoc; Lcom / sun / javadoc / MemberDoc; Ljava / lang / String; Z) и один после круглых скобок Ljava / lang / String; когда метод printDocLinkForMenu явно имеет пять параметров?
blockquote>Поскольку вы не используете код, который, по вашему мнению, работает. Фактически исполняемый код пытается вызвать именно этот метод, описанный в сообщении об ошибке, фактически на самом деле пять параметров (значение
I
должно учитываться отдельно) и возвращаемый типString
, но этот метод не работает 't существует в пути к среде выполнения (пока он был доступен в пути класса compiletime), следовательно, эта ошибка. Также см.NoSuchMethodError
javadoc :Брошено, если приложение пытается вызвать указанный метод класса (статический или экземпляр), а этот класс больше не имеет определение этого метода.
Обычно эта ошибка улавливается компилятором; эта ошибка может возникнуть только во время выполнения, если определение класса несовместимо изменилось.
blockquote>Итак, проверьте, действительно ли вы используете правильную версию кода, как вы разместили в своем вопросе, и используете правильные зависимости в пути к среде выполнения и не дублируете разные версии библиотеки в пути к классам.
Обновление: исключение означает, что фактический код (неявно) пытается использовать метод следующим образом:
String s = printDocLinkForMenu(context, cd, (MemberDoc) emd, name, false);
Потому что он ожидает результата
String
, пока он объявленvoid
.
Из раздела 4.3.2 JVM Spec:
Character Type Interpretation ------------------------------------------ B byte signed byte C char Unicode character D double double-precision floating-point value F float single-precision floating-point value I int integer J long long integer L<classname>; reference an instance of class S short signed short Z boolean true or false [ reference one array dimension
Из раздела 4.3.3, дескрипторы метода :
Дескриптор метода представляет параметры, которые принимает метод, и возвращаемое им значение:
blockquote>MethodDescriptor: ( ParameterDescriptor* ) ReturnDescriptor
Таким образом,
(ILcom/sun/javadoc/ClassDoc;Lcom/sun/javadoc/MemberDoc;Ljava/lang/String;Z) Ljava/lang/String;
переводит на:
Метод с параметрами
int
,ClassDoc
,MemberDoc
,String
иboolean
в качестве параметров и который возвращает aString
. Обратите внимание, что только опорные параметры разделяются точкой с запятой, так как точка с запятой является частью их символьного представления.
Итак, подытожим:
Почему четыре типа в круглых скобках (ILcom / sun / javadoc / ClassDoc; Lcom / sun / javadoc / MemberDoc; Ljava / lang / String; Z) и один после круглых скобок Ljava / lang / String; когда метод printDocLinkForMenu явно имеет пять параметров?
blockquote>Существует пять параметров (int, ClassDoc, MemberDoc, String, boolean) и один возвращаемый тип (String).