首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

对泛型类的非泛型引用会导致非泛型返回类型

对于泛型类的非泛型引用,可能会导致非泛型返回类型。这是因为泛型类的非泛型引用可能会导致类型擦除,从而导致返回类型的不确定性。

为了避免这种情况,可以使用通配符来指定泛型类的返回类型。例如,可以使用通配符 <?> 来指定泛型类的返回类型,这样就可以避免类型擦除的问题。

此外,也可以使用类型擦除的概念来解决这个问题。例如,可以使用类型擦除来将泛型类的返回类型转换为非泛型类的返回类型,从而避免类型擦除的问题。

总之,对于泛型类的非泛型引用,需要注意类型擦除的问题,并使用通配符或类型擦除来解决这个问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Kotlin】 ① ( | 参数 | 型函数 | 多参数 | 类型约束 )

, 主构造函数之前 , 该参数 T 是 类型占位符 , 在 该中 可以使用 类型占位符 T 作为一个 使用 , 可以 定义 T 类型成员属性 主构造函数中可以接收 T 类型实例对象作为参数..., T 类型可以 作为函数返回值 ; 通常情况下 , 参数 都使用 T 表示 , 使用其它字母 或者 字符串 都可以表示 参数 , 但是 约定俗成 都使用 T 来表示 ; 代码示例 :...下面的代码中 , 声明了 Student , 该 接收 T 类型参数 , 在主构造函数中接收 T 类型参数 , 在该中声明了 T 类型成员属性 ; class Student...---- 函数 参数 或 返回类型类型 , 则该函数称为 型函数 ; 代码示例 : 该代码中 , 型函数 logT 参数 和 返回值 都是 T 参数 类型 ; class...---- 型函数 中 如果涉及到 匿名函数 参数 , 匿名函数 参数返回值 都是 的话 , 在该型函数 中可能需要使用多个 , 使用不同字母表示不同 ; 如果函数中 引入了新类型

2.7K10

【Flutter】Dart ( | 方法 | 特定类型约束 )

文章目录 一、Dart 方法 二、Dart 特定类型约束 三、Dart 自带 四、完整代码示例 五、 相关资源 一、Dart 方法 ---- 作用 : 为 ,...接口 , 方法 提供复用性 , 支持类型不确定数据类型 ; : 提高代码复用程度 ; 方法 : 参数或返回值有类型约束 , 参数或返回类型必须符合对应类型 , 使用时会进行类型检查约束..., 如果设置错误类型 , 编译时报错 ; 示例 : /// 作用 : 为 , 接口 , 方法 提供复用性 , 支持类型不确定数据类型 /// /// : 提高代码复用程度 /...int _grade; String school; String city; String address; /// 父构造函数调用 : 如果父空参数构造函数, 子类必须实现相同参数构造函数....方法名 // 命名工厂构造方法可以有返回值 // 如果类中有 final 修饰成员 , 在命名构造方法中必须其进行初始化 // 但是在命名工厂构造方法中 , 可以不初始化 final

4.8K00

【Java 简介 ( | 方法 | 静态方法 | 方法完整示例 )

作用 : 安全检查 : 在 编译阶段 , 就可以进行 代码检查 , 将更少错误带到运行时 ; 避免强转 : 避免 类型强转 导致不必要安全问题 ; 提高性能 : 使用可以 提高 Java...; 其中 参数 , 返回类型是 T , 但 这个 T 是作为一个正常类型使用 , 并不是声明在 方法 中 ; 如果 , 接口 , 方法 是 , 接口 , 方法 , 则该..., 与 参数类型 T , 返回类型 T , 方法内部 T , 都是同一个类型 ; /** * * 该 T 类型作为参数使用 * T 是参数化类型 , 可以由外部传入 *...T 可以是不同类型 * * 方法中定义 T * 与参数类型 T * 返回类型 T * 方法内部 T...---- 静态方法 : 如果静态方法中 使用了 T , 作为参数 或 返回值 , 这种使用时错误 ; 如果必须在 静态方法 中使用 T , 则该 T 必须是静态方法 ,

13.5K30

【Kotlin】总结 ★ ( | 参数 | 型函数 | 多参数 | 类型约束 | 可变参数结合 | out 协变 | in 逆变 | reified 检查参数类型 )

主构造函数中可以接收 T 类型实例对象作为参数 , T 类型可以 作为函数返回值 ; 通常情况下 , 参数 都使用 T 表示 , 使用其它字母 或者 字符串 都可以表示 参数 , 但是 约定俗成...---- 函数 参数 或 返回类型类型 , 则该函数称为 型函数 ; 代码示例 : 该代码中 , 型函数 logT 参数 和 返回值 都是 T 参数 类型 ; class...---- 型函数 中 如果涉及到 匿名函数 参数 , 匿名函数 参数返回值 都是 的话 , 在该型函数 中可能需要使用多个 , 使用不同字母表示不同 ; 如果函数中 引入了新类型...八、 out 协变 ---- 使用 out 关键字 , 可以使 子类对象 赋值给 父对象 ; 在 中 , 如果只将 类型 作为 函数返回类型 , 则在 声明 参数...(t: T) } 十、 invariant 不变 ---- 在 中 , 如果 既将 类型 作为 函数参数 类型 , 又将 类型 作为 函数返回类型 , 则在 声明 参数

3.7K10

方法、类型通配符使用

方法、类型通配符使用 一.        声明和声明类似,除了在名后面添加了类型参数声明部分...和方法一样,类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。一个参数,也被称为一个类型变量,是用于指定一个类型名称标识符。...下面是定义方法规则: 所有方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前(在下面例子中)。...类型参数能被用来声明返回类型,并且能作为方法得到实际参数类型占位符。 方法体声明和其他方法一样。...注意类型参数只能代表引用类型,不能是原始类型(像int,double,char等) 1 public class GenericMethodTest 2 { 3 // 方法 printArray

3.8K40

擦除是什么意思_方法区别

大家好,又见面了,我是你们朋友全栈君 在严格代码里,带声明总应该带着类型参数。但为了与老Java代码保持一致,也允许在使用带声明时不指定实际类型。...如果没有为这个指定实际类型,此时被称作raw type(原始类型),默认是声明该形参时指定第一个上限类型。...当把一个具有信息对象赋给另一个没有信息变量时,所有在尖括号之间类型信息都将被扔掉。...比如一个 List 类型被转换为List,则该List集合元素类型检查变成了参数上限(即Object)。...而言,可以直接把一个List对象赋给一个 List 对象,编译器仅仅提示“未经检查转换”。

1.3K30

Java详解:和Class使用。方法详细使用实例

这里可能看不懂,开篇总是困难,下面看看如果没有的话,我们要怎么做; 2、没有怎样  先看下面这段代码: 我们实现两个能够设置点坐标的,分别设置Integer类型点坐标和Float类型点坐标...,普通构造函数是这样:Point p = new Point() ;  而构造则需要在名后添加上,即一尖括号,中间写上要传入类型。...      与定义一样,也是在接口名后加尖括号; (1)、使用方法一: 但是在使用时候,就出现问题了,我们先看看下面这个使用方法:      [java]     view plain...唯一不同是,要在函数定义中在返回值前加上标识; 5、其它用法:Class传递及数组  (1)、使用Class传递Class对象 有时,我们遇到一个情况,比如,我们在使用...如果有同学T...arg用法不了解,可以去找下JAVA 可变长参数方面的知识。 由于可变长参数在输入后,保存在arg这个数组中,所以,我们直接把数组返回即可。

3.2K50

扩展方法必须在静态中定义

请注意,它是在嵌套静态内部定义: C# namespace ExtensionMethods { public static class MyExtensions {...但是,编译器生成中间语言 (IL) 会将代码转换为静态方法调用。 因此,并未真正违反封装原则。 实际上,扩展方法无法访问它们所扩展类型私有变量。...与接口或方法具有相同名称和签名扩展方法永远不会被调用。 编译时,扩展方法优先级总是比类型本身中定义实例方法低。 ...静态 Extensions 包含为任何实现了 IMyInterface 类型定义扩展方法。  A、B 和 C 都实现了该接口。...在使用扩展方法来扩展你无法更改其源代码类型时,你需要承受该类型实现中更改导致扩展方法失效风险。

1.8K10

正确用法

在准备下次直播Java基础内容中,偶然看到Java这个知识点,突然有了点想法,之前一直纠结一个问题有了解答思路。...问题:我在多线程任务基中定义了一个T对象t,但是一直没有找到一个特别合适发光点,感觉跟重新写一个内部类差别不大,偶尔在匿名中使用,非但没有更加灵活,反而衍生出一些其他多线程锁问题。...,额外属性对象就可以用这个T代替。...突觉自己以前走了很多弯路,掌握和应用太浅薄,说干就干了,马上现有的性能测试框架中abstract和实现都改一遍。...,被继承中T可以声明成为HttpRequestBase,然后在代码中关于父操作,如super(request, times, mark);中是可以成立,然后在本类名后面的不能声明对象,

84740

java中理解

,它无法引用其他类型对象。...对于方法,其首先在申明中并没有进行相关申明,但是在使用方法时候又希望进行使用。那么此时,就需要在方法返回值之前,用尖括号来进行申明,之后就可以对进行使用了。...,首先用进行了申明,之后就是正常使用。...JVM并不知道存在,因为在编译阶段就已经被处理成普通和方法; 擦除核心动机是你可以在客户端上使用库,反之亦然。这经常被称为“迁移兼容性”。...在理想情况下,所有事物将在指定某天被化。在现实中,即使程序员只编写代码,他们也必须处理 Java 5 之前编写库。

67220

相关时,如何在两个之间创建类似子类型关系呢

Integer(10)); // OK someMethod(new Double(10.1)); // OK 当然也是如此,在执行类型调用时,将Number作为其类型参数传递,如果参数是...那么问题来了,当相关时,如何在两个之间创建类似子类型关系呢?例如如何让Box 和Box变得与Box有关呢?...为了搞懂这个问题,我们先来了解一下同一类型对象是如何实现子类型吧。...小结:可以通过继承或者实现接口来其进行子类型化。 搞懂了子类型问题,我们回到“如何在两个之间创建类似子类型关系“问题。...或者接口并不会仅仅因为它们类型之间有关系而变得相关,如果要达到相关,我们可以使用通配符来创建或接口之间关系。

2.8K20

Java详解——绝对是方法讲解最详细,没有之一!

因此我们需要一个在逻辑上可以表示同时是Generic和Generic父引用类型。由此类型通配符应运而生。...//这只是中一个普通成员方法,只不过他返回值是在声明已经声明过。 //所以在这个方法中才可以继续使用 T 这个。..."cannot reslove symbol E" * 因为在声明中并未声明E,所以在使用E做形参和返回类型时,编译器无法识别。...可以类型与T相同,也可以不同。 //由于方法在声明时候声明,因此即使在中并未声明,编译器也能够正确识别方法中识别的。...:静态方法无法访问上定义;如果静态方法操作引用数据类型不确定时候,必须要将定义在方法上。

3.5K22

Java详解——绝对是方法讲解最详细,没有之一!

因此我们需要一个在逻辑上可以表示同时是Generic和Generic父引用类型。由此类型通配符应运而生。...//这只是中一个普通成员方法,只不过他返回值是在声明已经声明过。 //所以在这个方法中才可以继续使用 T 这个。..."cannot reslove symbol E" * 因为在声明中并未声明E,所以在使用E做形参和返回类型时,编译器无法识别。...可以类型与T相同,也可以不同。 //由于方法在声明时候声明,因此即使在中并未声明,编译器也能够正确识别方法中识别的。...:静态方法无法访问上定义;如果静态方法操作引用数据类型不确定时候,必须要将定义在方法上。

48810
领券