Java 泛型小结

STM32 (基于HAL库) 硬件IIC任意地址读写任意字节----AT24CXX芯片 转了一圈,发现有关STM32的iic的硬件是使用比较少,基于HAL库的就更少,传统的,大家都是采用软件模拟的。有iic的协议相对复杂,同时灵活,尤其是不同的设备的I2C通信组合变化也不同,使用灵活的软件模拟也是可以理解的,在加上I2C的设备读写速度都比较低,硬件读写的优势就更无法体现,哪怕硬件I2C可以开启DMA,甚至在随机的读取少量字节的情况下。开启DMA反而效果更差。自然而然的硬件I2C就无人问津了。 阅读详情

转:http://blog.sina.com.cn/s/blog_69a4df530100p8w1.html

经过将近两个小时的学习与思考,对java泛型有了新认识,之前一直都是随便用用,而没有深入学习、思考,趁着现在有空闲时间,重新再学一下泛型,才明白其较深层的意思。

学习泛型时,最大困惑的就是里面的通配符使用。现在好好总结一翻:首先从网上的仁兄那,解析下,什么是泛型,为什么要使用泛型:

泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。

接下来,就是实践了,话不在多,直接看代码:

 package com.gen.test;

 

 

class A<K, V> {

    private K name;

    private V size;

 

    public K getName() {

       return name;

    }

 

    public void setName(K name) {

       this.name = name;

    }

 

    public V getSize() {

       return size;

    }

 

    public void setSize(V size) {

       this.size = size;

    }

 

}

 

public class TestGen1 {

 

    public static void main(String[] args) {

       A<String,Integer> a = new A<String,Integer>();

       a.setName("william");

       a.setSize(176);

       System.out.println(a.getName());

       System.out.println(a.getSize());

    }

}

这里给我们的启动时,泛型有点像C++里的模块。

 

//////////////////////////////////////////demo two//////////////////////////////////////////

package com.gen.test;

 

 

class B<K extends String, V extends Integer> {

    private K name;

    private V size;

 

    public K getName() {

       return name;

    }

 

    public void setName(K name) {

       this.name = name;

    }

 

    public V getSize() {

       return size;

    }

 

    public void setSize(V size) {

       this.size = size;

    }

 

}

 

public class TestGen2 {

 

    public static void main(String[] args) {

       A<String,Integer> a = new A<String,Integer>();

       a.setName("william");

       a.setSize(176);

       System.out.println(a.getName());

       System.out.println(a.getSize());

    }

}

会发现,在类的声明处,用了一个叫extends的关键字,有必要说一下:

Extends: 上界用extends关键字声明,表示参数化的类型可能是所指定的类型,或者是此类型的子类。

Super: 下界用super进行声明,表示参数化的类型可能是所指定的类型,或者是此类型的父类型,直至Object。

下面,利用作图法,使我们能看得更清楚:

假如代码如下:<? Extends Date>,<? Super Date>

作图如下:
图片

看了图之后,就不难理解了。

如果对此想深入研究的话,请参考下面的一位仁兄写的文章:

http://fyting.javaeye.com/blog/122732

最后我想说一下,“?”这个问题的用法:

先看代码:

 

class C<K ,V extends Number> {

    }

 

class D<J extends C<String,? super Number>,K>{

}

C<String,? super Number>:?处,只能传入以Number为下限的东西,即Number的父类而class C<K ,Vextends Number>又限定了,只能传以Number为上限的东西,即Number的子类,最终限定了,我们只能传Number类

public class TestGen3 {

 

    public static void main(String[] args) {

       public static void main(String[] args) {

       D<C<String,Integer>,String> d = new D<C<String,Integer>,String>();

    }

}

个人觉得,学习泛型是一个需要仔细思考的一个过程,有了这些基础之后,相信对看一些开源框架有帮助,毕竟写框架的作者都是些高手。

今天学习了java annotation与泛型,巩固一下自己的基础。

YOLOv8与注意力机制融合:EMA(高效多维注意力)的原理剖析与实战应用 本文介绍了如何在YOLOv8目标检测模型中集成EMA(高效多尺度注意力)机制。主要内容包括:EMA注意力机制的工作原理解析,展示其多尺度特征融合和高效计算特性;详细的环境配置与依赖安装指南;EMA模块的完整代码实现,包含分组处理、空间注意力权重计算和特征融合等关键步骤;以及将EMA集成到YOLOv8网络结构的方法。通过添加EMA模块,可以提升模型对关键特征的关注能力,有效抑制背景干扰,从而增强目标检测性能。本教程提供了从原理到实现的完整解决方案。 阅读详情

相关推荐

手把手教你用Trae配置Python开发环境(含Claude 3.5代码生成实战)

本文详细介绍了如何使用字节跳动推出的Trae智能开发环境配置Python开发环境,并实战演示了Claude 3.5代码生成功能。从环境准备到项目初始化,再到AI辅助编码和调试优化,全面展示了Trae在提升开发效率方面的强大能力,特别适合Python开发者快速搭建项目和解决复杂问题。

weixin_28309571的博客 977

Java泛型小结

泛型泛型概念好处类型泛型类、接口、方法泛型类泛型类注意事项从泛型类派生子类泛型接口泛型接口的使用泛型方法语法说明泛型方法与可变参数泛型方法总结类型通配符什么是类型通配符类型通配符的上限类型通配符的下限类型擦除分类无限制类型擦除有限制类型擦除擦除方法中类型定义的参数桥接方法泛型与数组泛型数组的创建可以通过`java.lang.reflect.Array`的`newInstance(Class,int)`创建`T[]`数组泛型和反射反射常用的泛型类 泛型 JAVA推出泛型以前,程序员可以构建一个元素类型为Obj

水滴的专栏 755

基于aarch64分析kernel源码 六:kernel_init进程(1号进程)、kthreadd进程(2号进程)

kernel_init进程(1号进程)、kthreadd进程(2号进程)分析

OnlyLove_的博客 765

Java泛型用法小结

泛型让代码的适用性增强,安全性也得到了较大程度的保障。

m0_59250245的博客 1475

STM32H743IIT6上LVGL移植实战:从零到触摸屏驱动的完整配置流程

本文详细记录了在STM32H743IIT6高性能MCU上,从零开始移植LVGL图形库到7寸RGB触摸屏的完整实战流程。内容涵盖工程搭建、显示与触摸驱动配置、LVGL核心优化及常见问题排查,重点讲解了如何利用STM32H743的硬件特性(如DMA2D、LTDC)提升GUI性能,为嵌入式GUI开发提供了一份详实的配置指南。

spark7igniter的博客 561

原形网络(Prototypical Networks)基于PyTorch的实现

我在Jay2coomzz的基础上修改了数据处理方式和evaluation_model()方法,作为初学者若有不当之处恳请大家批评指正,原文链接如下: https://blog.youkuaiyun.com/weixin_38471579/article/details/102631018 数据集和源码链接将放到评论区 文章目录1 数据集一个简单的数据集介绍数据集处理2 搭建网络CNNProtonets 1 数据集 一个简单的数据集介绍 Omniglot数据集一共包含1623 类手写体,每一类中包含20 个样本。其中.

weixin_43872532的博客 6637

Java泛型使用小结

1       什么是泛型 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。 可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行

大象的博客 385

5分钟搞定!用Cursor和.NET 9.0快速搭建串口通讯上位机(附VS Code插件配置)

本文分享了如何利用Cursor AI编程助手与.NET 9.0,在5分钟内快速构建一个功能完整的串口通讯上位机程序。通过自然语言描述需求,AI自动生成WinForms界面和核心代码,极大提升了硬件调试工具的定制开发效率。文章详细介绍了环境配置、AI协作编码、功能实现与调试的全过程。

weixin_28366353的博客 277

JAVA之泛型小结

1. 泛型 泛型: 把类型当作参数一样传递 格式:<数据类型>  此处的数据类型必须是引用类型 好处: 1. 把运行时期的问题提前到编译期        2. 避免了强制类型转换 2. 应用 1. 泛型类 把泛型定义在类上 格式:public class 类名<泛型类型1 …>    可能会有多个泛型类型,如Map<K,V> 泛型类型必须是引用类型 2. 泛型方法 把泛型定义在方法上 格式:public <泛型类型> 返回类型 方法名(泛型类型 …

痒羊羊 227

数据分析案例-基于红米和华为手机的用户评论分析

在智能手机市场日益繁荣的今天,红米与华为手机作为国产手机品牌的佼佼者,凭借其各自独特的品牌魅力和技术实力,赢得了广泛的用户群体和高度关注。随着技术的不断进步和消费者需求的日益多样化,用户对手机的期望已不仅限于基本的通讯功能,更涵盖了性能、拍照、续航、用户体验等多个方面。因此,深入探究红米与华为手机在用户长期使用过程中的实际表现,尤其是用户评论中所反映出的真实反馈,对于理解市场需求、优化产品设计及提升用户体验具有重要意义。本实验的背景正是基于这样的市场环境和技术发展趋势。我们旨在通过收集并分析红米与华为手机的

m0_64336780的博客 1万+

14、深入解析Sigma - Delta调制算法:从原理到应用

本博客深入解析了Sigma-Delta调制(SDM)算法的原理与应用,特别是在Super Audio CD(SA-CD)音频编码中的作用。文章探讨了传统SDM的局限性,并介绍了一系列改进型前瞻式SDM技术,如Trellis Sigma-Delta调制、高效网格Sigma-Delta调制和修剪树Sigma-Delta调制。这些技术通过降低计算复杂度和提升信号转换质量,在音频处理和无损数据压缩领域展现出巨大潜力。此外,博客还对不同SDM技术进行了性能比较,并分析了如何实现最大信噪比(SNR),为未来音频技术和数

tgb34567890的博客 424

Java泛型的小结

泛型的小结什么是泛型?泛型的作用泛型类,接口,方法泛型限定符(extends)泛型的局限性泛型的继承规则泛型通配符JVM中如何处理泛型 什么是泛型? 泛型:把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊的类型,JDK5之后引入。 参数化类型:把类型当作参数传递,<数据类型>只能是引用类型 泛型的作用 可以让多种数据类型使用同一份代码 编写时指定类型,编译是插入错误的...

xmqjkl的博客 153

TC3XX - MCAL知识点(四十二):AURIX™ TC3xx实现多相电机需要多核配合使用的场景与实操分析

本文探讨了多相电机控制系统中的关键技术问题,重点分析了多核处理器在电机控制中的应用。针对十二相电机等复杂应用场景,提出了同步采样、多核协同等解决方案。文章详细阐述了相电流同步采样原理及EBTresos配置方法,分析了ADC硬件触发机制和多核配合策略。通过Core0和Core1的协同工作设计,解决了位置信息采集与FOC算法执行的时序问题,并提供了代码实现示例。实验验证了采用ATOM0_7同时触发两个核ADC中断的可行性,为多相电机控制系统的实现提供了技术参考。

梦想技术家 500

java中泛型小结

一、什么是泛型? 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。 可以在集合框架(Collection framework)中看到泛型的动机。例如,Map 类允许您向一个 Map 添加任意类的对象,

liuchuangjin的博客 633

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

深度学习工具包 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")

java 泛型小结

java中的泛型技术,使得对象类型不在是固定的,而是可以作为参数来指定,比较常用的代码如下 List ls=new ArrayList()没有泛型时List默认装载的是Object类对象,所以在取出元素的时候需要强制类型转换成为元素本身的类型。 使用泛型技术,事先指定了这个List装载的对象类型就是Integer,所以在取出元素时不需要再进行类型转换。 泛型类: 在声明一个类的时候,添加类

epmark的博客 360

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

java泛型小结

一、概述 泛型是java1.5引入的概念,用于规范用户输入类型,泛型使用的一个误区是将泛型当做类型或变量看待,从而尝试例如 T.class,new T() 等操作,实际上泛型只是一个契约,约定了在本类里用到相同泛型的地方类型一致,使用时,跨类之间契约可传递。 泛型的好处: 1. 实现java类型安全,相当于用户提供泛型信息,编译器帮用户做类型校验,减少用户错误编码造成的类型异常。 2. 使...

yzb808的专栏 296

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

java基础(泛型小结)

泛型是什么 泛型是java5的新特性,它是类和接口的扩展,它是带一个或者多个类型参数的类和接口。类型参数中的类型可以是接口或者类,但不能是基本数据类型。 设计原则:只要在编译时期没有出现错误,那么运行时期就不会出现ClassCastException异常。 泛型:它把类型明确的工作推迟到创建对象或调用方法时才去明确的特殊的类型 参数化类型:把类型当做参数来传递,<>中只能是引用类型 为什么要引入泛型 因为Object类是所有类的父类,所以java早期是使用object来代表任意类型的,但是

weixin_44226752的博客 551

java vector 泛型_java中关于泛型的小结

------------------------------------------------------------泛型入门1 jdk1.5以前的集合中存在的问题ArrayList collection=new ArrayList();collection.add(1);collection.add(1L);collection.add("abc");int i=(Integer)array...

weixin_35838019的博客 300
上一篇: JavaSE JNI 动态注册本地方法(c语言实现native层)
下一篇: iptables的详细介绍及配置方法
lcathm
博客等级 码龄18年 37粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值