Java中范型的重载

泛型和方法的重载 首先必须有泛型声明,告知编译器当前方法使用自定义泛型格式:权限修饰符 是否有静态 <泛型占位符> 方法名(形式参数列表)【重点注意】形式参数列表中必须有一个参数对应的自定泛型,用于明确泛型对应的具体数据类型//实际参数为int 类型test(10);//实际参数为Demo3类对象//匿名对象直接作为方法的参数//实际参数为字符串类型test("字符串");String str = getType("字符串");/** 阅读详情

问题: 什么是范型???

答案:java中可以用T或其他大写字母代替一个未知的类型,例如 定义类的时候 class A<T>中的T就是一个范型,T可以代替任何类型或者类。

问题:为什么java的范型是一个假范型??

答案:因为java的代码在编译成class文件之后,会将范型给去掉。会用object代替范型。所以java的范型是假范型。
例如:
`
public (T) List<T> get(List<T> obj){
} 
编译之后变成:
public List<Object> get(List obj) {
}
`

问题:为什么java中用范型进行重载不可以??

例如代码如下:
class A {
	public void say(List<Integer> a) {
	}
	
	public void say(List<String> b) {
	}
}
上述代码,会报错,为什么呢???因为java在编译之后,会将范型给去掉,所以编译之后代码是如下:
class A {
	public void say(List a) {
	}
	
	public void say(List b) {
	}
}
两个方法是一摸一样的,而在java中同一个方法不能存在两个,所以会报错。

问题:为什么jdk1.6中返回值不同的两个范型的方法,可以同时存在??

例如代码如下:
class A {
	public Integer say(List<Integer> a) {
	return 0;
	}
	
	public String say(List<String> b) {
	return null;
	}
}
答案:因为java代码中确认唯一方法(特征签名)是根据方法名+参数顺序+参数类型,而在字节吗中确认唯一方法(特征签名)是根据返回值+方法名+参数顺序+参数类型+异常表。因为返回值不同,所以编译通过之后上面两个方法是唯一确认的。不过仅仅在jdk1.6中可以,其余版本编译不通过,会报错。因为在java代码中就会认为他们是一样的。
Java泛型的重写与重载:深入理解@Override注解 本文深入探讨了Java泛型在方法重写和重载中的作用与影响。通过分析带有@Override注解的示例代码,揭示了泛型在继承中的特定行为,特别是非泛型子类覆盖泛型超类方法的特殊情况。同时,文章还介绍了类型擦除的概念及其对运行时类型检查的限制,强调了在泛型编程中遵循正确重写规则的重要性。 阅读详情

相关推荐

浅谈Java泛型通配符解决了泛型的许多诟病(如不能重载)

下面小编就为大家带来一篇浅谈Java泛型通配符解决了泛型的许多诟病(如不能重载)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Java八股文——重载+泛型(一)

java十分详细的关于泛型以及重载的讲解

PjhDepon的博客 618

从拆解到调试:用CS5523改造旧款车载显示屏的完整记录(MIPI转eDP方案)

本文详细记录了使用CS5523芯片将旧款车载显示屏从MIPI接口改造为eDP驱动的完整过程。通过对比LT8911等芯片,选择CS5523实现低功耗、高兼容性的显示升级,涵盖硬件改造、固件配置及调试技巧,最终成功提升显示效果200%。

web99的专栏 344

java重载看什么_【细说Java】方法重载的简单介绍

1. 什么是重载方法名称相同,但它们的参数类型或个数不同,这样,方法在被调用时编译器就可以根据参数的类型与个数的不同加以区分,这就是方法的重载。既然可以通过参数类型或参数个数来作为重载条件,那返回值是否可以作为重载的条件呢?代码如下:public intreturnType() {return 2;}public floatreturnType() {return2f;}这时候如果这样调用此方法:...

weixin_34509196的博客 224

从智能家居到智慧城市:AI Agent Harness Engineering 作为统一控制中枢

我们可以把每个独立的智能系统看作一根带有独立功能的电线:智能家居Agent是负责家庭设备控制的电线,社区Agent是负责社区管理的电线,城市交通Agent是负责交通调度的电线,而AHE就是把这些分散的电线整合起来的「智能线束」:它不仅负责把不同接口、不同协议、不同层级的Agent连接起来,还提供统一的编排、调度、协同、观测能力,实现全局效用最大化的智能决策。

AI Agent Harness Engineering 202

SAP批量程序(一)-静态批量EX,FX和期间批量MB,WB和TB

SAP批量程序(一)-静态批量和区间批量

weixin_38974136的博客 5478

泛型方法的重载、JAVA的泛型?泛型擦除

Java的方法重载一般指在同一个类中的两个同名方法,规则很简单:两个方法必须具有不同的方法签名;由于编译器不能仅仅通过方法的返回值类型来区分重载方法,所以如果两个方法只有返回类型不同,其它完全一样,编译是不能通过的。这个时候会编译器报错,由于Java的泛型采用擦除法实现,List和List在运行时是完全一样的,都是List类型。只有返回值类型不同,这在两个普通方法的重载中是不允许的,一个类不能同时继承两个具有相同擦除类型的父类,也不能同时实现两个具有相同擦除的接口。

jj89929665的博客 1105

Unity3D实战:5分钟搞定RTSP监控视频播放(附完整代码)

本文提供了一套在Unity3D中快速集成RTSP监控视频播放的实战方案。通过采用LibVLCSharp for Unity这一成熟稳定的跨平台中间件,开发者可以轻松实现RTSP流的解码与渲染,并附有完整的C#代码示例,帮助用户在5分钟内完成集成,适用于智慧园区、安防监控等3D可视化场景。

weixin_29001655的博客 191

Java中的语法糖

一、范型 1. C#和Java范型的区别 在C#中范型是切实存在的,List<int>和List<String>就是两种不同的类型,它们在系统运行期间生成,有自己的虚方法表和类型数据,这种实现称为类型膨胀,基于这种方法实现的范型称为真实范型。 Java语言中的范型则不一样,它只存在于源码中,在编译后的字节码文件中,就已经被替换为原来的原生类型了,并且在相应的地方插入了...

weixin_30515513的博客 69

Halcon 3D点云处理实战:从PLY文件读取到曲面匹配的完整流程(附避坑指南)

本文详细介绍了Halcon在3D点云处理中的完整流程,从PLY文件读取到曲面匹配,特别强调了3D算子的应用技巧和避坑指南。通过实战案例和参数优化建议,帮助开发者高效处理工业视觉检测中的复杂点云数据,提升匹配精度和性能。

weixin_42535720的博客 278

给IC设计新人的Tessent Scan入门指南:从RTL到ATPG的完整DFT流程解析

本文为IC设计新手提供Tessent Scan的完整DFT流程指南,从RTL代码检查到ATPG测试向量生成,详细解析扫描链配置、插入及验证的关键步骤。通过实战案例和工具命令示例,帮助工程师快速掌握Tessent工具链的应用技巧,提升芯片可测试性设计的效率和质量。

weixin_32541663的博客 451

java方法重载/重写

在JAVA中,多态主要体现为方法的重载和重写。 方法重载:同一个类中,方法名相同,参数列表不同(在编译器那层基本不会考虑返回参数)的两个或多个方法就视为这个几个方法是重载的。 Java的“重载机制”为开发者提供了便利的同时也规定了一系列的规范和限制。 方法重写:对应于父类和子类,方法名和方法描述符相同(参数列表和返回类型组成),就会产生重写,即子类的方法会覆盖掉父类的方法( 对了,静态方法的...

Chain的博客 423

YOLOv11低照度增强主干网络PE-YOLO:原理与完整实现教程

编码器部分# 解码器部分self.dec_conv2 = nn.Conv2d(512, 128, 3, padding=1) # 跳跃连接self.dec_conv3 = nn.Conv2d(256, 64, 3, padding=1) # 跳跃连接self.dec_conv4 = nn.Conv2d(128, 32, 3, padding=1) # 跳跃连接# 编码路径# 解码路径(带跳跃连接)

FJN110的博客 727

java中的方法签名

java方法签名 ● 组成 ○ 方法名。 ○ 参数列表(类型、个数、顺序)。 ● 注意! ○ 与返回值、修饰符以及异常无关。 ○ 在Class文件格式中,返回值不同,可以合法地共存于一个Class文件中。 ○ 范型中,类型擦除,List与List是相同参数List。 ○ 参数String… str 与参数String[] str 是相同参数。 ● 重写与重载 ○ 重写:同一个类中方法签名不同的方法。 ○ 重载:方法签名必定相同,返回值必定相同,访问修饰符子>父,异常类 子<父。 ...

Skiray的博客 1199

【AI智能体】Codex 浏览器操作自动化任务实战操作详解

【AI智能体】Codex 浏览器操作自动化任务实战操作详解

congge 4136

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C++不足之处讨论系列(四)--函数重载

以下文章翻译自Ian Joyner所著的《C++?? A Critique of C++ and Programming and Language Trends of the 1990s》 3/E【Ian Joyner 1996】原著版权属于Ian Joyner,征得Ian Joyner本人的同意,我得以将该文翻译成中文。因此,本文的中文版权应该属于我;-)该文章的英文及中文版本都用于非商业用途,

cber的专栏 1584

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java范型类型擦除

一. 概述 在上一篇范型博客中,主要讲解了范型的基本使用和设计,在本篇博客中主要讲解使用范型带来的问题和解决方法。 在使用java范型时,我们通常会遇到诸多问题,例如不能使用T.class,不能直接使用T t.method(),不能通过范型参数实现方法重载等等,这一切的原因都归结于-“范型类型擦除”。 二.什么是类型擦除 我们知道,jdk1.5以前是不支持范型的,以List为例,在Li

宇的博客 666

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

1-java基础

不可变对象指对象一旦被创建,状态就不能再改变,任何修改都会创建一个新的对象,如String、Integer及其它包装类,不可变对象最大的好处是线程安全java中常量池的概念主要有3个全局字符串常量池 , class文件常量池 , 运行时常量池定义jvm为了提升性能和减少内存开销,避免字符的重复创建,其维护了一块特殊的内存空间,即字符串池,当需要使用字符串时,先去字符串池中查看该字符串是否已经存在,如果存在,则可以直接使用, 如果不存在,初始化,并将该字符串放入字符串常量池中。

zjsheng_2018的博客 137

Dart 学习笔记

在Dart中,一切都是对象,一切对象都是class的实例,哪怕是数字类型、方法甚至null都是对象,所有的对象都是继承自Object 虽然Dart是强类型语言,但变量类型是可选的因为Dart可以自动推断变量类型 Dart支持范型,List<int>表示一个整型的数据列表,List<dynamic>则是一个对象的列表,其中可以装任意对象 Dart支持顶层方法(如main方法),也支持类方法或对象方法,同时你也可以在方法内部创建方法 Dart支持顶层变量,也支持类变量或对象变量

bihansheng2010的博客 557

java方法重载

JAVA方法重载      【介绍定义】         在Java 中,同一个类中的2个或2个以上的方法可以有同一个名字,只要它们的参数声明不同即可。在这种情况下,该方法就被称为重载(overloaded ),这个过程称为方法重载(method overloading )。方法重载是Java 实现多态性的一种方式。如果你以前从来没有使用过一种允许方法重载的语言,这个概念最初可能有点奇怪。但是

u014049072的专栏 441

Java自定义范型的应用技巧

我们在JAVA中 处处都用到了 范型 ,JAVA中的范型是从C++模板继承来的,不过 JAVA的 范型的功能 远远没有 C++那么强大 。 我们知道在C++中 模板可以很方便的代替任意类型的数据 如下 ; template<class T> void show(T x) { cout<<x<<endl ; } 上面的T 可以代表任意类型的数据 ,...

weixin_30924239的博客 134

C++ 与 Java 语言对比

1 . Java 是完全封装的,而 C++ 的函数是可以定义在 Class 的外部的。从这里就可以看出 C++ 的 OO 思想不够彻底,至少在封装这一点上。 2. C++ 中有拷贝构造函数,可以把一个对象的属性 copy 到另一个对象里 , 也叫对象赋值,而 Java 是用 Clone 实现的。 3. Java 的世界是 Object 世界(当然除了基本类型,这...

weixin_33720452的博客 138

JAVA面向对象

一、面向对象概述: 面向对象是一种程序设计范型,将类的属性和方法封装成对象,以对象为程序的基本的执行单元。1.3、重载方法 (overload ):方法名与其他方法的方法名相同,参数类型和个数不同的方法称为重载方法;1.4、构造方法:方法名与类名相同,没有返回值的方法,也称构造器 ,构造器的作用是创建对象;(2)无参构造方法:没有入参参数,虚拟机会默认创建无参构造器,不需要程序员去写,但程序员自己定义了构造器,默认的构造器就会失效。(1)有参构造方法:带有入参参数的构造器,创建对象时,赋值给对象。

qq_45781545的博客 266

第三章 面向对象范型

本文系统介绍了面向对象编程(OOP)的核心概念及其在软件工程中的应用。主要内容包括: 面向对象基础 辨析"范型"与"泛型"的概念差异 介绍类与对象、继承、多态等基本特性 强调封装与信息隐藏的重要性 软件设计原则 详细讲解内聚(7个层次)与耦合(5个层次)的度量标准 提出"高内聚、低耦合"的设计目标 分析数据封装与抽象数据类型的实现方法 UML建模语言 说明UML的发展历史和主要图表类型 介绍类图、时序图等常用建模工具 提供UML在软件开发各阶段的应

AI时代的DevOps 985

Tip - 小心:泛型方法重载非泛型方法

今天发现有段代码没有返回预计结果,该代码使用了另一个同事写好的一个类: public class ServiceResponse    {            public ServiceResponse(T _result){..}            public ServiceResponse(string _errorMessage){..}...}

个人沉淀 2324
上一篇: Java多态之前期静态绑定与后期动态绑定
下一篇: java 锁机制
angle_sun
博客等级 码龄12年 23粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值