当前位置: 首页 > 知识库问答 >
问题:

浅谈java中的泛型转换

娄利
2023-03-14

在Java中,大家都知道整数不能转换为字符串,这是编译时的一个错误。

对于这个一般的情况,

        public <T> T cast(Object o) {
            return (T) Integer.class.cast(o);//cast Integer to T
        }

        void method1() {
            String q = cast("q"); //T is String
        }

我只是不明白为什么在这种情况下,java不能在编译时警告您整数转换为字符串。为什么?据我所知,类型删除是在编译后发生的。

编辑:我只是以为编译器有类型推断才知道T是字符串,这样就不能将Integer强制转换为。但显然没有。

共有1个答案

董俊晖
2023-03-14

用这个

public <T> T cast(Object o) {
     return (T) Integer.class.cast(o);//cast Integer to T
}

声明一个无界的类型变量t。它可以是任何引用类型。因此强制转换整数可能有效,也可能无效。

编译器所能做的就是警告你

public <T extends CharSequence> T cast(Object o) {
    return (T) Integer.class.cast(o); // Cannot cast from Integer to T
}

那么您很可能会得到一个编译错误,因为charsequenceinteger不在同一个继承层次结构中,因此不兼容。

在这种特定情况下,即使不强制转换为t也会出现编译错误。这是因为

AnyTypeName.class 

始终返回并且类#cast使用泛型类型。在这种情况下,它将返回integerinteger不能转换为t

 类似资料:
  • 本文向大家介绍浅谈java中定义泛型类和定义泛型方法的写法,包括了浅谈java中定义泛型类和定义泛型方法的写法的使用技巧和注意事项,需要的朋友参考一下 1、方法中的泛型 2、定义泛型类 以上这篇浅谈java中定义泛型类和定义泛型方法的写法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 本文向大家介绍浅谈Java向下转型的意义,包括了浅谈Java向下转型的意义的使用技巧和注意事项,需要的朋友参考一下 一开始学习 Java 时不重视向下转型。一直搞不清楚向下转型的意义和用途,不清楚其实就是不会,那开发的过程肯定也想不到用向下转型。 其实向上转型和向下转型都是很重要的,可能我们平时见向上转型多一点,向上转型也比较好理解。 但是向下转型,会不会觉得很傻,我是要用子类实例对象,先是生成子

  • 本文向大家介绍浅谈java泛型的作用及其基本概念,包括了浅谈java泛型的作用及其基本概念的使用技巧和注意事项,需要的朋友参考一下 一、泛型的基本概念 java与c#一样,都存在泛型的概念,及类型的参数化。java中的泛型是在jdk5.0后出现的,但是java中的泛型与C#中的泛型是有本质区别的,首先从集合类型上来说,java 中的ArrayList<Integer>和ArrayList<Stri

  • 本文向大家介绍浅谈Java数值类型的转换与强制转换,包括了浅谈Java数值类型的转换与强制转换的使用技巧和注意事项,需要的朋友参考一下 数值类型之间的转换 6个实心箭头箭头表示无信息丢失的转换; 3个虚箭头表示可能有精度损失的转换. 当使用上面两个数值进行二元操作时,先要将两个操作数转换为同一类型,然后再进行计算. 规则:`两个数中小类型的值将自动转换为大类型的值. 小转大可以,但是大转小会损失精

  • 本文向大家介绍浅谈Java泛型通配符解决了泛型的许多诟病(如不能重载),包括了浅谈Java泛型通配符解决了泛型的许多诟病(如不能重载)的使用技巧和注意事项,需要的朋友参考一下 泛型: 泛型的方法不能重载,因为泛型擦出后是一样的方法,也就是如果一个方法里的形参的泛型的,则不能重载这个方法,即:即使方法名相同,参数不同也不行,但是普通方法可以重载(同名不同参) 那个HTML本来打算过渡到XML的,且中

  • 本文向大家介绍浅谈Python数据类型之间的转换,包括了浅谈Python数据类型之间的转换的使用技巧和注意事项,需要的朋友参考一下 Python数据类型之间的转换 函数 描述 int(x [,base]) 将x转换为一个整数 long(x [,base] ) 将x转换为一个长整数 float(x) 将x转换到一个浮点数 complex(real [,imag]) 创建一个复数 str(x) 将对象