gpt4 book ai didi

java - 可调用.getReturnType() : cannot reproduce Guava's example from the official wiki

转载 作者:行者123 更新时间:2023-12-01 22:26:09 25 4
gpt4 key购买 nike

official Guava's TypeToken wiki ,有下面的例子:

Invokable<List<String>, ?> invokable = new TypeToken<List<String>>() {}.method(getMethod);
invokable.getReturnType(); // String.class

如何设置getMethod

我尝试了以下示例:

  1. 第一次尝试:

    List<String> list = new ArrayList<String>();
    Class[] arg = { int.class };
    Method getMethod = list.getClass().getMethod("get", arg);
    Invokable<List<String>, ?> invokable = new TypeToken<List<String>>() {}.method(getMethod);
    System.out.println(invokable.getReturnType());

    它崩溃并显示以下消息:

    Exception in thread "main" java.lang.IllegalArgumentException: public java.lang.Object java.util.ArrayList.get(int) not declared by java.util.List<java.lang.String>
    at com.google.common.base.Preconditions.checkArgument(Preconditions.java:145)
    at com.google.common.reflect.TypeToken.method(TypeToken.java:495)
    at tmp.LaunchClass.main(LaunchClass.java:28)
  2. 第二次尝试(虽然有点不同):

    List<String> list = new ArrayList<String>();
    Class[] arg = { int.class };
    Method getMethod = list.getClass().getMethod("get", arg);
    // changed here
    Invokable invokable = TypeToken.of(list.getClass()).method(getMethod);
    System.out.println(invokable.getReturnType());

    不会崩溃,但不会返回预期结果。返回E。预期结果:String.class(如官方 wiki 中所示)。

最佳答案

您正在尝试从 ArrayList 获取方法 get。您应该从 List 获取它。

Class<?> clazz = List.class;
Method getMethod = clazz.getMethod("get", int.class);

TypeToken#method(Method) 的 javadoc州

Returns the Invokable for method, which must be a member of T.

其中 T 是在 TypeToken 中声明的类型变量。

关于java - 可调用.getReturnType() : cannot reproduce Guava's example from the official wiki,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28747244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com