社区
Java SE
帖子详情
java的类型识别问题
Holinfox
2006-05-10 02:56:47
我有一个Object对象,该对象原来所属的类型已经知道,但是类型是以字符串形式表达的。如何将这个Object转换为它原来所属的类型?例如,例如,我从容器中读出了一个对象,当然,该对象是Object类型的,根据getClass()方法,我可以知道,这个对象原来所属的类型(例如,它原来属于String类型),如何把这个object转换为它原来所属的类型(String类型)?
...全文
325
16
打赏
收藏
java的类型识别问题
我有一个Object对象,该对象原来所属的类型已经知道,但是类型是以字符串形式表达的。如何将这个Object转换为它原来所属的类型?例如,例如,我从容器中读出了一个对象,当然,该对象是Object类型的,根据getClass()方法,我可以知道,这个对象原来所属的类型(例如,它原来属于String类型),如何把这个object转换为它原来所属的类型(String类型)?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
UnAgain
2006-05-11
打赏
举报
回复
get方法也可以这么写:
public boolean get(int index, Object[] obj){
Object e = list.get(index);
if (obj[0].getClass() == e.getClass()) {
// 或者 if (obj[0].getClass().isInstance(e)) {
obj[0] = e;
return true;
}
return false;
}
但是,这样就要求用户使用时必须初始化数组,象这样:
Integer[] i = new Integer[1];
i[0] = 0;
ml.get(0, i)
我没有办法从得到数组可容纳的元素的类型,好像是不可能的。所以创建一个空数组来作类型匹配检验:
Object ea = Array.newInstance(e.getClass(), 0);
if (obj.getClass() == ea.getClass()) {
另外,到目前为止,通过参数传递对象地址只能使用数组,所以我用数组作参数,而不是象最早的帖子中,使用引用作参数。
GALFORDD
2006-05-11
打赏
举报
回复
Class.isInstance(reference)
reference instanceof Object
reference.equals(reference)
UnAgain
2006-05-11
打赏
举报
回复
如果方便的话我们在线聊吧,比较实时
MSN: tl21cen@hotmail.com
UnAgain
2006-05-11
打赏
举报
回复
这是我能想到的最好的解决方案了。动态类型识别,数组传递对象
import java.util.ArrayList;
import java.lang.reflect.Array;
public class TestDynamicCast_1 {
static class MyList {
ArrayList list;
public MyList(ArrayList list) {
this.list = list;
}
public boolean get(int index, Object[] obj){
Object e = list.get(index);
Object ea = Array.newInstance(e.getClass(), 0);
if (obj.getClass() == ea.getClass()) {
obj[0] = e;
return true;
}
return false;
}
}
public static void main(String[] args) {
ArrayList<Object> list = new ArrayList<Object>();
list.add(Integer.valueOf(1));
list.add("Hello");
list.add(list);
MyList ml = new MyList(list);
Integer[] i = new Integer[1];
if (ml.get(0, i)) {
System.out.println(i[0]);
}
String[] s = new String[1];
if (ml.get(1, s)) {
System.out.println(s[0]);
}
ArrayList[] lists = new ArrayList[1];
if (ml.get(2, lists)) {
System.out.println(lists[0]);
}
}
}
Holinfox
2006-05-11
打赏
举报
回复
to:UnAgain
如果由用户来自己来转换的话,似乎也不容易,因为,如果容器中的对象比较多的话,用户也很难分清哪个是哪个,除非用户这样做:
if(userClass1.class.isInstance(o1)){
userClass1 uc = (userClass1)o1
}else {
if(userClass2.class.isInstance(o2)){
userClass2 uc = (userClass2)o2
}
...........
其中,userClass1,userClass2等是用户的类型 , o1 , o2是用户从容器中读出的对象。这样用户好像需要写上一堆的if...else...才可以,不方便使用,有没有其它的办法?
Holinfox
2006-05-11
打赏
举报
回复
我觉得,这个有点像检查点的问题,就是,用户先把一些中间结果先存起来,再在适当的时候恢复,只是这个恢复过程比较麻烦。
crazycy
2006-05-10
打赏
举报
回复
好像挺有用的;关注;
if (obj istanceof String) {
....
} else if (obj instanceof List) {
......
}
UnAgain
2006-05-10
打赏
举报
回复
这个问题只能由用户自己转换。对象存入容器之后,并没有失去类型信息,其类型信息仍然在其内部保留着。
因为你做的是一个通用类,你不可能知道用户到底会存入什么对象。并且你也不知道用户会用什么方法从中取得对象。除非使用参数作为输出:
定义方法:
class MyList extends ArrayList {
....
public boolean get(index id, Object obj){
ele = list.get(id)
if ( ele instanceof obj.getClass()) {
obj = ele;
return true;
} else {
return false;
}
}
}
然后,用户使用:
String s;
myList.get(1, s);
但这么做,一是java不提倡,另外,你给的信息也不够多。
所以,如果你只想给用户提供一个容器,到目前为止就足够了。
Holinfox
2006-05-10
打赏
举报
回复
我现在在做的是一个包,这个提供这样一个功能:用户可以调用包中提供函数把他自己的对象(有可能是任何对象)先保存起来,然后,在需要的时候又把存入的对象读取出来。因为用户要存入的对象的类型是不确定的,因此我用容器来实现(如ArrayList),这样才能存储各种类型,但现在面临一个问题:用户把它的对象存入容器后,就失去了类型信息(都变成Object类型了),因此读出来以后就是一个Object对象,而不是用户存进去之前的对象,如何把这个Object转化为用户刚存入前的类型呢?
UnAgain
2006-05-10
打赏
举报
回复
To: Holinfox()
具体问题具体对待。你要说一下,你转换类型之后要执行什么操作?这样才能回答你的问题。
chaosking
2006-05-10
打赏
举报
回复
用instanceof操作符写一堆if
zclgod
2006-05-10
打赏
举报
回复
if("String".equals(你的字符串)) {
(String)你的Object
} esle if("其他类型".equals(你的字符串)) {
(其他类型)你的Object
}
。。。。。。。。。。。。
Holinfox
2006-05-10
打赏
举报
回复
请大家注意,String类型只是举个例子,可能容器里还有许多其它类型,另外,以前的类型名是用字符串表示的,所以像这样:以前的类型 mm=(以前的类型)Object,好像不行。二楼和三楼的朋友的方法好像不可行。
真的没有其它办法吗?
lukan
2006-05-10
打赏
举报
回复
怎么说呢,总的来说这个是没有办法自动完成类型的转换的
你可能只能知道这个容器里总共只有可能有几种类型
然后就
swich(arrayList.getClass().getName().hashCode()){
case "String".hashCode():
......
qczl1224
2006-05-10
打赏
举报
回复
String str = (String)Object;
或String str = Object.toString();
qczl1224
2006-05-10
打赏
举报
回复
以前的类型 mm=(以前的类型)Object;
java
验证码
识别
Java
验证码
识别
技术主要涉及到图像处理和光学字符
识别
(OCR)两个关键领域,是自动化系统中用于防止机器人自动操作的一种安全机制。在这个
Java
项目中,我们看到的文件名可能与训练模型、输入图像和
识别
结果有关。...
最新
java
ee api中文版帮助文档 chm格式
9. **JAF(
Java
Beans Activation Framework)**和**JAFR(
Java
Beans Activation Framework for RMI)**:这两个框架用于处理和
识别
数据对象,支持MIME
类型
。 10. **JAX-RS(
Java
API for RESTful Web Services)**...
mybatis-3.2.3 jar包和源码
- **TypeHandler**: 负责
Java
类型
与JDBC
类型
之间的转换。 2. **MyBatis的优势** - **简洁的API**: MyBatis简化了DAO层的编写,使得SQL与
Java
代码解耦。 - **灵活的SQL**: 支持动态SQL,可以根据条件自由拼接SQL...
mail.jar&activation.jar
而activation.jar是
Java
Beans Activation Framework (JAF)的一部分,它是
Java
平台的标准组件,用于处理和
识别
不同的数据
类型
,特别是与MIME相关的数据。JAF主要负责对象的激活,即根据数据内容的
类型
来决定如何处理...
java
日期
识别
_
Java
自动
识别
日期格式
原理通过将不全的格式替换为全格式 yyyy-MM-dd HH????????ss.SSS遍历所有格式进行替换,假如替换成功,则根据标记位...具体代码请查看文件 DateUtils.
java
,可以右击另存为。
识别
格式package com.yanzuoguang.light...
Java SE
62,623
社区成员
307,257
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章