You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复React Native原生模块包规范中的ViewManager相关编译器警告?

修复React Native原生模块中"Raw use of parameterized class 'ViewManager'"警告的方法

问题描述

在React Native原生模块的包类中出现编译器警告:

Raw use of parameterized class 'ViewManager'

对应的完整源码:

package com.example.foobar;

import androidx.annotation.NonNull;

import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;

import java.util.Collections;
import java.util.List;

public class FooBarPackage implements ReactPackage {
    @NonNull
    @Override
    public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactContext) {
        return Collections.emptyList();
    }

    @NonNull
    @Override
    public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactContext) {
        return Collections.singletonList(new FooBarViewManager());
    }
}

修复方案

原因解析

ViewManager是一个泛型类,定义为public abstract class ViewManager<T extends View, C extends ReactShadowNode>。直接使用List<ViewManager>属于未指定泛型参数的原始类型调用,不符合Java泛型的类型安全规范,因此触发编译器警告。

代码修改

将createViewManagers方法的返回类型从List<ViewManager>改为List<ViewManager<?, ?>>,通过泛型通配符明确表示兼容任意合法的泛型参数组合:

package com.example.foobar;

import androidx.annotation.NonNull;

import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;

import java.util.Collections;
import java.util.List;

public class FooBarPackage implements ReactPackage {
    @NonNull
    @Override
    public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactContext) {
        return Collections.emptyList();
    }

    @NonNull
    @Override
    public List<ViewManager<?, ?>> createViewManagers(@NonNull ReactApplicationContext reactContext) {
        return Collections.singletonList(new FooBarViewManager());
    }
}

补充说明

ViewManager<?, ?>的写法既遵守了Java泛型语法规则,又不会影响现有业务逻辑——你的FooBarViewManager必然是ViewManager的某个具体泛型实现,通配符可以完美兼容这种情况,同时彻底消除编译器警告。

内容的提问来源于stack exchange,提问作者friederbluemle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 12:07:31