「java泛型类型推导」Java 泛型 ?
今天给各位分享java泛型类型推导的知识,其中也会对Java 泛型 ?进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、在JAVA中是如何体现C++的函数模板这种机制的?
- 2、java中一个方法的返回值可能是integer或者Double,请问该怎么定义泛型接收
- 3、如何正确理解java中的泛型类型推导
- 4、谁知道 T[] toArray(T[] a)是什么意思?????????????
- 5、什么叫泛型?有什么作用?
- 6、为什么Java没有类似C#里var或者C++
在JAVA中是如何体现C++的函数模板这种机制的?
很不好意思,Java的特性比C++少得多。Java不支持模板。只支持很少的类似于C++模板的语法来实现很有限的泛型编程。
Java对泛型编程的支持也是最近才加进去的,而且支持的很不好。你就不用指望能像C++那样用它了。
Java是一个非常纯粹的OOP语言,它天生就是相对动态的、后期的,编译期处理的信息非常少,这和C++强静态的特性是完全相反的。
Java的绝大部分类型信息都属于RTTI,也就是在运行时动态获取,不像C++是在编译期由编译器推导的,所以Java基本上不可能支持C++那样灵活的模板。
Java的泛型也是,说白了只是个障眼法,用类似C++那样的模板语法来包装了其面向对象动态cast的本质而已。
举例说,java中的Vectorint,你给里面保存int的时候,每一个int都是先被包装成一个Integer对象然后塞进去,取出来的时候是先取出Object对象,转换成Integer对象,然后再从里面取出int这个整数,绕了很大一个弯子。
虽然从代码上写的和C++差不多都很简洁,但是实际的效率和C++差了n个数量级。这点上实在是比较恶心,C#都做得比它好,C#至少对于值类型还是会实例化代码的。
Java天生就是一个鼓励动态化、运行期化、OOP化的一个语言,所以它不适合使用C++中那些泛型编程的范式来设计程序。你如果能够忍受Java的装箱拆箱的巨大效率损失,你可以用OOP的方式来实现那种同一个函数服务多种类型的想法,但是的确很低效。
java中一个方法的返回值可能是integer或者Double,请问该怎么定义泛型接收
泛型也做不到,泛型是用来推导一批函数,用不同的类型实例化出不同的函数,你得要求是,同一个函数,不同case的返回值类型不同,泛型不太适合你的需求。
泛型方法可类型如下定义:
public T T function(参数)
{
return ....;
}
T推导成何种类型,看如果调用
例如:
int i = function();//T = Integer
Object o = function();//T = Object
然而无论T为何种类型,推导之后的T都是唯一的,其实就是函数的返回值类型,是确定的。
从这个角度来说,设计上你这个想法是有问题的。
可以定义返回类型是Object,这样无论if else返回什么类型都能适用,不过还是再强调一下,这个不同case返回不同类型的设计,有点问题。
如何正确理解java中的泛型类型推导
具体类型应该是开发者编写程序调用的时候自己指定的类型,Java的泛型是一种编译时泛型,按目前的理解Java泛型只是提供了一种编译时的类型安全检查,而编译后实际运行时是没有某种被定义的"泛型"类型的(类型搽除)。
其实对于初学者对这一点可以将Java泛型简单理解为一种将因类型错误而引发的异常提前到编码阶段。当开发者在错误的调用泛型类和方法时IDE就会提示错误,而不用等到程序真正运行时再报错。
谁知道 T[] toArray(T[] a)是什么意思?????????????
这个T表示这个方法是一个泛型方法,其中泛型参数名为T。如果像这样调用:
String[] a = list.toArray(new String[list.length()]);
则传给toArray()方法的参数是String[]类型的,Java编译器会推导出此时T就是String。泛型参数也可以显式指定:
什么叫泛型?有什么作用?
泛型。即通过参数化类型来实现在同一份代码上操作多种数据类型。泛型类和泛型方法同时具备可重用性、类型安全和效率,这是非泛型类和非泛型方法无法具备的。泛型通常用与集合以及作用于集合的方法一起使用。
泛型是c#2.0的一个新增加的特性,它为使用c#语言编写面向对象程序增加了极大的效力和灵活性。不会强行对值类型进行装箱和拆箱,或对引用类型进行向下强制类型转换,所以性能得到提高。
Java 的泛型
Java 泛型的参数只可以代表类,不能代表个别对象。由于Java泛型的类型参数之实际类型在编译时会被消除,所以无法在运行时得知其类型参数的类型,而且无法直接使用基本值类型作为泛型类型参数。Java编译程序在编译泛型时会自动加入类型转换的编码,故运行速度不会因为使用泛型而加快。
由于运行时会消除泛型的对象实例类型信息等缺陷经常被人诟病,Java及JVM的开发方面也尝试解决这个问题,例如Java通过在生成字节码时添加类型推导辅助信息,从而可以通过反射接口获得部分泛型信息。通过改进泛型在JVM的实现,使其支持基本值类型泛型和直接获得泛型信息等。
为什么Java没有类似C#里var或者C++
你说的是自动类型推导吧,C# 里的 var ,和 C++11 里的 auto 这些关键字。
首先这些关键字是我们所说的“语法糖”,能够简化编程,提高效率,再者就是实现泛型编程。而 Java 标准的制定者可能是考虑到类型推倒的效率等因素,目前没有向 Java 中增加这个特性。但不一定未来不增加,原来 Java 也是没有泛型容器的,现在不是也有了吗。
关于java泛型类型推导和Java 泛型 ?的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-29,除非注明,否则均为
原创文章,转载请注明出处。