有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中获取泛型类型参数的类

我有一个类需要处理扩展Number类的对象。为此,我使用类型参数T。但是,类中的一些函数需要知道T是什么类(例如,返回与T相同类的对象)

到处弹出的解决方案Class<T> clazz = (Class<T>) ((ParameterizedType) getClass().getSuperClass()).getActualTypeArguments()[0];看起来很有希望,因为我可以使用isAssignableFrom。但是,getActualTypeArguments[0]部分返回一个TypeVariableImpl,这显然意味着我需要做一些不同的事情

更具体地说,我目前拥有的代码如下所示:

public class Outer {
    //Sole purpose of the Dummy class is for the getGenericSupertype() method.
    private static abstract class Dummy<T> {
        private Class<T> clazz;

        @SuppressWarnings("unchecked")
        public Dummy() {
            clazz = (Class<T>) ((ParameterizedType) 
                    getClass().getGenericSuperclass())
                    .getActualTypeArguments()[0]; //ClassCastException
        }

        public Class<T> getClazz() {
            return clazz;
        }
    }

    public static class Foo<T extends Number> extends Dummy<T> {
        private Class<T> typeOfNumber;
        //...

        public Foo() {
            typeOfNumber = getClazz();
            //...
        }

        public Foo(T number) {
            this();
            //...
        }
        //...

        private boolean isA(Class<?> type) {
            return type.isAssignableFrom(typeOfNumber);
        }

        public T toThisType(double x) {
            if(isA(Integer.class))
                return new Integer((int) x);
            //...
        }
    }

    //Several functions that use Foo were omitted for brevity.
}

我打算在其他类中扩展Outer,然后为某些操作创建Foo对象。如果可能,我不想在任何构造函数中放入类似Class<T> clazz的内容。简言之,声明为new Foo<Integer>()的对象有没有办法知道T是一个Integer


共 (0) 个答案