搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
我家自动化
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
Elasticsearch REST API 文档管理_elasticsearch api文档
2
PMP笔记_pmpspi
3
【数据库】多表查询二----嵌套查询(子查询)_(6)查询年龄比“刘晨”同学大的学生姓名以及系别。
4
论文笔记:SGM: Sequence Generation Model for Multi-label Classification
5
网络空间测绘引擎集合:Zoomeye、fofa、360、shodan、censys、鹰图_常用网络空间资产测绘
6
iptables 防火墙设置_iptables防火墙配置
7
Elasticsearch:(二)3.安装Elasticsearch-head插件
8
【MySqL】 表的创建,查看,删除_查看表
9
【Hadoop】YARN容量调度器详解
10
Redis数据有效期_redis的数据默认有效期
当前位置:
article
> 正文
java泛型问题 关于警告:XXis a raw type【转】_headobj is a raw type. references to generic type
作者:我家自动化 | 2024-04-21 14:50:55
赞
踩
headobj is a raw type. references to generic type headobj
should b
JavaTiger(Java5.0)-arraylist is a raw type
2008-04-08 15:08
(本文例子适用于JDK 5.0, 学习请先安装并配置!!!)
我们从一个简单的例子开始:假设我们现在需要一个专用来存储字符串的L
is
t,该如何实现?呵呵,这还不简单,且看如下代码:
public st
a
tic void m
a
in(String[]
a
rgs)
{
L
is
t
strL
is
t
=
n
e
w
ArrayList
();
strL
is
t.
a
dd("on
e
");
strL
is
t.
a
dd("two");
}
相信很多人都有过这样写的经历,不错,这个写法确实没有错。以前我们甚至都是这么做的。但是不是说要与时俱进么?这样的写法到今天来看,却就有问题了。问题来源于我们的需求,我们需要的是一个专门用来存储字符串的L
is
t,现在请在这段程序代码后面加一句,使之变成这样:
public st
a
tic void m
a
in(String[]
a
rgs)
{
L
is
t
strL
is
t
=
n
e
w
ArrayList
();
strL
is
t.
a
dd("on
e
");
strL
is
t.
a
dd("two");
strL
is
t.
a
dd(n
e
w Int
e
g
e
r(1));
}
然后运行检查一下,可以运行!是个好消息,别高兴,问题就在于这个L
is
t能正常运行(记住:程序员要求的不是程序能运行)。回头看看,我们的需求是这个L
is
t专门用来存储字符串,但是现在,这个L
is
t竟然还可以存储一个整型数据。也许你会说,J
a
v
a
类库定义的不就是可以存储任意一个Obj
e
ct么?是的,没错,但是现在我们的需求范围变小了,只需要存储字符串。别说我是钻牛角尖,我们看一个更普遍的问题:当我们操作数据库的时候,我们经常会返回一张表的所有数据,在我们通过实体关系映射之后,我们得到的就是一系列相同类型的数据,通常我们采取的操作是用一个L
is
t来保存这一系列的数据,但是由于这些数据都具有相同的类型,因此,这个L
is
t也就成了一个保存单一对象的L
is
t了。看到这里,我想对于我这个例子的目的大家应该清楚了。
现在我们来讨论一下问题的解决之道,一句话来总结就是我们需要一个只能操作单一类型的L
is
t。方法就在这里,J
a
v
a
5给我们提供了解决之道-----
Generic
,对于我们的这个例子来说,J
a
v
a
5的类型安全要发挥作用了。
现在我们回到程序清单一,打开你的开发工具,编译一下(
E
clips
e
等工具下面不用你自己变异就可以看到),我们发现程序虽然没有错误,但是却有一个警告:
Type
s
a
f
e
ty: Th
e
m
e
thod
a
dd(Obj
e
ct)
be
longs
to
th
e
raw
type
L
is
t.
References
to
generic
type
L
is
t
should
be
parameterized
看见了么, J
a
v
a
Tig
e
r给你警告了,警告的来源就是上面所说的类型安全。如果你查询一下J
a
v
a
doc,你会发现L
is
t 是这样定义的 :
Public int
e
rf
a
c
e
L
is
t
<
E
>
e
xt
e
nds Coll
e
ction,It
e
r
a
bl
e
注意这个
<
E
>
,它就是J
a
v
a
Tig
e
r的类型安全标志,我想,到这里可以给出在保证类型安全时我们例子中的L
is
t应该如何定义了:
L
is
t
<
String
>
strL
is
t
=
n
e
w
ArrayList
<
String
>
();
在理解这条语句之前请先记住,以后这就是L
is
t的官方写法了(^_^)。现在来看一下,在L
is
t之后我们有
<
String
>
这样的标志,在J
a
v
a
Tig
e
r里面,这就是类型安全的定义方法,结合这条语句,很容易就可以看出,我们定义了一个用来存储String类型的L
is
t。来看看重新定义后的效果:
public st
a
tic void m
a
in(String[]
a
rgs)
{
L
is
t
<
String
>
strL
is
t
=
n
e
w
ArrayList
<
String
>
();
strL
is
t.
a
dd("on
e
");
strL
is
t.
a
dd("two");
}
再编译一下或者直接在
E
clips
e
里面观察,先前的警告没有了。
到此,应该说我们已经掌握了类型安全的基本用法了,现在我么来个小小的改变,将L
is
t 的定义改成这样:
L
is
t
<
String
>
strL
is
t
=
n
e
w
ArrayList
();
呵呵,警告又回来了。虽然我们在这里对L
is
t定义了String类型,但是我们在实例化的时候去却没有指定,因此出现了这个警告,所以记住上面讲的官方写法。
现在回来,让我们来验证一下这个保证了类型安全的L
is
t是不是安全的。让我们还是通过向这个l
is
t 添加一个整型数据来验证:
public st
a
tic void m
a
in(String[]
a
rgs)
{
L
is
t
<
String
>
strL
is
t
=
n
e
w
ArrayList
<
String
>
();
strL
is
t.
a
dd("on
e
");
strL
is
t.
a
dd("two");
strL
is
t.
a
dd( n
e
w Int
e
g
e
r(1) );
}
结果竟然出错了(这可不是警告啊!) 是不是很神奇?看一下出错的消息:
Th
e
m
e
thod
a
dd(String) in th
e
type
L
is
t
is
not
a
pplic
a
bl
e
for th
e
a
rgum
e
nts (Int
e
g
e
r)
效果很明显,这个L
is
t的
a
dd方法已经只能接受String类型的参数了,J
a
v
a
doc中的
a
dd( Obj
e
ct obj )方法已经不能用了,现在大家都应该很满意了吧,我们的需求达到了,这个L
is
t太安全了,呵呵。想想它带来的好处,以后当我们要处理一个L
is
t中间的元素时,再也不需要这么写了:
String
str
= (String) l
is
t.g
e
t( i );
有了类型安全,我们可以直接书写:
String
str
=
l
is
t
.g
e
t( i );
也许这还不以让你来满意,但是看这样一个方法吧:
public L
is
t
<
String
>
g
e
tStrL
is
t( L
is
t
<
String
>
l
is
t )
{
.....
r
e
turn XXX;
}
这就是参数化类型的威力,别告诉我说你觉得这个方法没有什么特别的。
好了,我想我的目的应该已经达到了,大家应该明白J
a
v
a
5里面的类型安全是怎么回事以及如何运用了,好吧,为了让大家心里更有底,再写两行代码让大家看看:
M
a
p
<
Int
e
g
e
r
,String
>
myM
a
p
=
n
e
w
H
a
shM
a
p
<
Int
e
g
e
r
,String
>
();
S
e
t
<
MyCl
a
ss
>
s
e
t
=
n
e
w
H
a
shS
e
t
<
MyCl
a
ss
>
(0);
不用再举例了吧,这几个例子够直白了吧。
在本文结束的时候,让我们又回到程序清单一,先前不是有警告么?如果你是这样一个人,既不想用类型安全来消除警告,又不想要看到那个讨厌的W
a
ining,你可以在m
a
in方法以前加上这么一句(如果你用ID
E
的话可以自动来完成):
@Suppr
e
ssW
a
rnings("unch
e
ck
e
d") 。
使程序变成这样:
@Suppr
e
ssW
a
rnings("unch
e
ck
e
d")
public st
a
tic void m
a
in(String[]
a
rgs)
{
L
is
t
strL
is
t
=
n
e
w
ArrayList
();
strL
is
t.
a
dd("on
e
");
strL
is
t.
a
dd("two");
strL
is
t.
a
dd( n
e
w Int
e
g
e
r(1) );
}
这下子我想就算你如此挑剔也应该满足了,既没有类型安全,也没有警告了。为什么?关键在于我们添加的那行语句,它也是 J
a
v
a
Tig
e
r的新特性之一
A
nnot
a
tion:至于它是怎么回事,请关注后续话题。
出处:http://hi.baidu.com/qianyiliang/blog/item/431dbe223d790df6d7cae2a8.html
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/我家自动化/article/detail/463598
推荐阅读
article
java
.
lang
.
OutOfMemoryError
: Java
heap
space
的解决...
java
.
lang
.
OutOfMemoryError
: Java
heap
space
的解决_
java
.
lang
.ou...
赞
踩
article
java
.
lang
.
OutOfMemoryError
异常
完全指南...
我的职业生涯中见过数以千计的内存溢出
异常
均与下文中的8种情况相关。本文分析什么情况会导致这些
异常
出现,提供示例代码的同时...
赞
踩
article
分析和解决
java
.
lang
.
OutOfMemoryError
:
Java
heap
space
问题...
最近客户反馈在生产环境导入操作时遇到任务一直执行中,并且入库的数据量一直不改变。
java
.
lang
.OutOfMemor...
赞
踩
article
java
.
lang
.
OutOfMemoryError
Tomcat
内存溢出
解决方案
_
java
hea...
一、设置环境变量二、在Eclilpse中修改了启动参数,在VM arguments 加入三、在Idea中修改了启动参数,...
赞
踩
article
java
.
lang
.
OutOfMemoryError
: Java heap
space
...
主要有3种比较常见的OutOfMemory Error:Java.
lang
.
OutOfMemoryError
: Java...
赞
踩
article
为什么会产生
java
.
lang
.
OutOfMemoryError
: Java
heap
space
...
关于
java
.
lang
.
OutOfMemoryError
: Java
heap
space
错误,遇到的程序员可能不是...
赞
踩
article
java
:
java
.
lang
.OutOfMemoryError:
Java
heap
space...
java
:
java
.
lang
.OutOfMemoryError:
Java
heap
space_
java
.
lang
....
赞
踩
article
JAVA
HEAP
SPACE解决方法和
JVM
参数设置
...
在
JVM
中如果98%的时间是用于GC(Garbage Collection)且可用的 Heap size 不足2%的时候...
赞
踩
article
java
.
lang
.
OutOfMemoryError
Java
heap
space
错误及处理办法_...
以下是从网上找到的关于堆空间溢出的错误解决办法:
java
.
lang
.
OutOfMemoryError
:
Java
hea...
赞
踩
article
帆软
下载
PDF
报错
java
.
lang
.OutOfMemoryError: Java heap spa...
帆软
下载
PDF
报错
java
.
lang
.OutOfMemoryError: Java heap space_app 安装下...
赞
踩
article
接口报错原因分析:
handler
dispatch
failed
;
nested
exception
i...
接口报错原因分析:
handler
dispatch
failed
;
nested
exception
is
java
.lan...
赞
踩
article
【Android】【内存】
java
.
lang
.OutOfMemoryError 问题分析_andro...
前言项目中含有 rar 压缩包解压功能,使用的是 junrar,在解压一文件时(70多M,文件不大,但1000多张gif...
赞
踩
article
java
.
lang
.
OutOfMemoryError
:GC
overhead
limit
excee...
原文链接:https://www.cnblogs.com/dartagnan/archive/2010/12/24/20...
赞
踩
article
java
outofmemory
怎么
解决
_
java
.
lang
.
OutOfMemoryError
异常解...
引言
java
.
lang
.
OutOfMemoryError
简称OOM内存溢出,这是一种很常见的导致的程序崩溃的问题,但也是...
赞
踩
article
java
.
lang
.
OutOfMemoryError
: GC
overhead
limit
exce...
我们学习再多的理论知识,不如一次生产实践中遇到一次问题带来的收获多。当然这里分享的如有错误还望指出,只有这样才能不断的进...
赞
踩
article
java
.
lang
.
OutOfMemoryError
: Java
heap
space
JVM内存溢...
我先演示一下jvm内存溢出错误。package com.sk.jvm;import
java
.util.ArrayLis...
赞
踩
article
j
ava
.
lang
.
OutOfMemoryError
的两种解决办法_
ava
.
lang
.outofme...
j
ava
.
lang
.
OutOfMemoryError
的两种解决办法 不管是现在还是将来,每个j
ava
开发人员都会遇到j...
赞
踩
article
Android
"
java
.
lang
.OutOfMemoryError"的若干种情形及解决方式_an...
OOM就是内存溢出,即Out of Memory。也就是说内存占有量超过了VM所分配的最大。怎么解决OOM,通常OOM都...
赞
踩
article
【Android】Cause by:
java
.
lang
.OutOfMemoryError_安卓中c...
情况和标题一样最近在做安卓APP期末设计,出bug的时候我就觉得我的智商被按在地上反复摩擦,整个人处在崩溃边缘。话不多说...
赞
踩
article
【
Android
】【内存】java
and
dalvik
memory
...
1. 从 Java 代码到 Java 堆2.
and
roid
dalvik
heap管理3. Dalvik虚拟机的内存管...
赞
踩
相关标签
内存溢出
java
jvm
开发语言
优化
内存
tomcat
开发工具
操作系统
后端
帆软
java outofmemory怎么解决
JVM调优
JVM堆空间开辟依据
线上OOM问题分析与排查
线上OOM解决思路