如何通过Class对象进行向下转型?或者其他方法实现也可以。

fankobe 2006-04-30 01:39:48
如果我运行时创建了一个类,不过创建的时候就已经把它向上转型为Object了。
不过后来我想把它向下转为它本来的类型,应该怎样做?

最好可以说说使用Class对象的方法。
当然其他的方法也可以接受。

不要问我为什么这样做。我只是想知道怎样可以运行时转型为本来的类型。

谢谢!
...全文
594 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
pauliuyou 2006-05-22
  • 打赏
  • 举报
回复
直接就用Class.forName("className").newInstance()得到一个Object 然后再得到这个Object的Class对象,就可以获取这个Class的方法和变量. 方法可以用Method.invoke(..)调用. 有了Classs就可以随心所欲. 看JDK文档获取更多信息
禽兽v5 2006-05-19
  • 打赏
  • 举报
回复
oo语言和现实是很接近的,想想现实中的例子,你不用具体特征能分出不同地区的人吗?
fankobe 2006-05-18
  • 打赏
  • 举报
回复
to cm4ever(单细胞生物,亩产三万斤) :

请问你是那里明白了向下转换只能是强制而不能动态的?
确实如你所说,我没有清楚的了解OO概念。因为我是一个程序的初学者。OO以后才找个时候专门学习。

真的只能强制转换而不能动态吗?
为什么呢?

请大家发表一下意见,谢谢!
禽兽v5 2006-05-18
  • 打赏
  • 举报
回复
向下转换当然只能强制指定而不能动态,
只能说楼主没理解oo的概念。
crazycy 2006-05-17
  • 打赏
  • 举报
回复
强制类型转换
fankobe 2006-05-17
  • 打赏
  • 举报
回复
insiku(㊣瀟湘夜雨㊣)

写个程序来看看。

得到类型倒是容易,只是我想知道如果转换成这个类型。总不能每个类型都判断,然后转换吧。
insiku 2006-05-17
  • 打赏
  • 举报
回复
比如说覆写toString()
toString()返还对象类别
然后object调用toString()来获得对象类别 转换

我试试看
insiku 2006-05-17
  • 打赏
  • 举报
回复
能否在你的对象中建立方法 a()
方法A保存对象的类别 比如说用String
然后在object中调用a()来获得对象类别 然后转换

以上纯属猜想
fankobe 2006-05-17
  • 打赏
  • 举报
回复
倒,不是叫你们分析我的程序……

是分析问题

我的程序当然不是动态创建对象的。

做鸡真好吃 2006-05-10
  • 打赏
  • 举报
回复
en~
hero222 2006-05-10
  • 打赏
  • 举报
回复
從樓主的程序來看
應該無法add其他類的對象,我認為
因為已經進行判斷了
if((li.get(0).getClass().isInstance(o)))//判斷第一個對象的類是否和新增加的類一樣
我的理解,對嗎?
如果錯了,請指正


fankobe 2006-05-10
  • 打赏
  • 举报
回复
To vintager4(泥巴) :

你编写的程序是根据第一个放入的对象类型来确定以后只能放入同一种对象的方法吧?
谢谢。
这是一个前提,我想知道的是然后取出后然后转型。

给一个例如:

import java.lang.*;
import java.util.*;

public class staticCollection{
private List li=new ArrayList();
private boolean hasMenber =false;//是否已有第一对象的标志

public void add(Object o){
if(hasMenber){
if((li.get(0).getClass().isInstance(o)))
li.add(o);
else System.out.println("you can't add this object!!");
}
else {li.add(o);
hasMenber=true;
}
}
public static void main(String[] args){
staticCollection sc=new staticCollection();
sc.add("String");
sc.add("String2");
//sc.add(new Integer(1));//运行错误,
//因为第一次放入对象已经决定了类型

//问题来了,如果我现在想使用String的特有方法charAt()
//当然要先把它转型才可以用啊,想这样(String)加前缀直接转型
//但是需要考虑的是,你不知道放入的是String类呢?怎么办?
//如果到运行时才动态放入对象到StaticCollection中,那么我们
//有可以能不会知道他放入是什么类型的对象的,确实有这种可能。
//总不能通过instanceof来判断吧,可是有成千上万的类啊!!
//那么我现在想向下转型回原来的对象使用特有的方法,该怎么办?
}
}

希望大家继续支持~~
realdreamer 2006-05-08
  • 打赏
  • 举报
回复
向下转换当然是要知道本来的类型,是为了个别处理, 向上转换就用不着知道,那是为了统一处理了.
vintager4 2006-05-08
  • 打赏
  • 举报
回复
import java.util.*;
public class test3 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根

ArrayList l=new ArrayList();

String s="this is a String";

l.add(s);

Class c=l.get(0).getClass();

String s1="this ia another String";
Double d=new Double(10);
if(s1.getClass() == c) {
l.add(s1);
}
if(d.getClass() == c) {
l.add(s1);
}

System.out.println(l);
}

}

是不是这个意思啊?
hanjienihao1 2006-05-08
  • 打赏
  • 举报
回复
我能明白楼主的意思,以前也考虑过,不过不知道答案,帮你顶一下!
我认为程序肯定知道向上转型后的对象本来是什么类型。否则哪里来的多态.系统就是知道他原来是什么类型。不知道我说得对不对?
fankobe 2006-05-03
  • 打赏
  • 举报
回复
楼上的,我想问那该如何在运行时把它转换成本来的类型?
mingr6370 2006-05-03
  • 打赏
  • 举报
回复
有一种不好的写法,你可以试试

if( o instanceof Object ) {
//do sth
}
禽兽v5 2006-05-02
  • 打赏
  • 举报
回复
程序当然不知道.
所以你只能在运行时把一个类向上转换(up cast)成他的父类/父接口,调用父类的方法.

这就是为什么要设计成继承体系的原因.
fankobe 2006-05-02
  • 打赏
  • 举报
回复
不是楼上的意思,楼上的根本没有类型转换,而且d的类型本来就知道了,就是Date。

我讨论的是运行时才创建一个对象。
dfchjk 2006-05-01
  • 打赏
  • 举报
回复
Date d=new Date();
System.out.println(d.getClass().getName());//不知道是不是这个意思

C:\ww>java test
java.util.Date
加载更多回复(8)

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧