为什么这里需要“ String.class”?

ALI*_*HAN -5 java android firebase

给出以下代码:

dm.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(@NonNull DataSnapshot dataSnapshot, 
    @Nullable String s) {
        String value = dataSnapshot.getValue(String.class);
        arrayList.add(value);
        adapter.notifyDataSetChanged();
    }
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么要String.class在方法中使用

 dataSnapshot.getValue(String.class); 
Run Code Online (Sandbox Code Playgroud)

目的是什么?我从Firebase获取数据时正在使用它。我的代码工作正常。只是想学习含义。

Mic*_*odd 6

Javadoc中DataSnapshot寻找:

public T getValue (Class<T> valueType)

此方法用于将快照中包含的数据编组到您选择的类中。该类必须符合2个简单的约束:

  1. 该类必须具有不带参数的默认构造函数

  2. 该类必须为要分配的属性定义公共获取方法。反序列化实例时,没有公共获取器的属性将设置为其默认值

因此,由于此方法可以返回任何类型的类,因为它是通用方法,因此必须将方法返回的类的类型指定为参数。在这种情况下,它value是一个String,因此您需要传递String.class到方法中以String退出。

尽管在这种情况下,由于String返回了a,所以您可以选择使用无参数getValue()方法,并将结果转换如下:

String value = (String) getValue();
Run Code Online (Sandbox Code Playgroud)

JavaDoc

getValue()以本机类型返回此快照中包含的数据。返回的可能类型为:

  • 布尔型
  • 地图
  • 清单