Java:获取泛型类型

发布于 2024-12-14 00:33:44 字数 571 浏览 0 评论 0原文

我正在为 C++ 编写 Java 包装器,并希望使用泛型类来包装 C++ 模板。因此,我想获取 String 形式的泛型类型,以便我可以进一步将其传递给 JNI 并实例化相应的 C++ 对象。

编辑:这就是我的实现方式,以防有人感兴趣:

public class A<T>
{
    private long ptr; 

        public static <E> A<E> create(Class<E> cls)
        {
            return new A<E>(cls); 
        }

    private A(Class<T> cls)
    {
        ptr = create( cls.getName() ); 

        if(ptr == 0)
        {
            throw new NullPointerException(); 
        }
     }

    private native long create(String className); 
}

I'm writing a Java wrapper for c++ and would like to use a generic class to wrap a c++ template. Therefore I'd like to get the generic type as String so I can further pass it to JNI and instantiate a corresponding c++ object.

EDIT: this is how I implemented it, in case someone is interested:

public class A<T>
{
    private long ptr; 

        public static <E> A<E> create(Class<E> cls)
        {
            return new A<E>(cls); 
        }

    private A(Class<T> cls)
    {
        ptr = create( cls.getName() ); 

        if(ptr == 0)
        {
            throw new NullPointerException(); 
        }
     }

    private native long create(String className); 
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧人九事 2024-12-21 00:33:44

由于 类型擦除<,Java 泛型不会在编译时保留类型信息/a>.您需要将 T 类的实例传递给 A 类:

public class A<T>
{
    private Class<T> type;
    private long ptr; 

    public class A(Class<T> type)
    {
        this.type = type;
        ptr = create( getGenericType() ); 

        if(ptr == 0)
        {
            throw new NullPointerException(); 
        }
     }

    private String getGenericType()
    {
        return type.getName();
    }

    private native long create(String className); 
}

Java generics don't preserve type information past compile time, due to type erasure. You need to pass an instance of T's class to your A class:

public class A<T>
{
    private Class<T> type;
    private long ptr; 

    public class A(Class<T> type)
    {
        this.type = type;
        ptr = create( getGenericType() ); 

        if(ptr == 0)
        {
            throw new NullPointerException(); 
        }
     }

    private String getGenericType()
    {
        return type.getName();
    }

    private native long create(String className); 
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文