ObjectInputStream ois=new ObjectInputStream(new File("path"));
Object ob=ois.readObject();
如何将ob转换为原来的类型

解决方案 »

  1.   

    readObject()返回的是原类型经过上转型之后的为Object的类型,你现在都不知道是什么类型如何进行强制转化
      

  2.   


    public class A{}
    public class B extends A{
         public static main(String[] args){
             B b=new B();   //正常情况
              A a=b;         //向上转型
              Object obj=a;  //向上转型
             B b1=(B)obj;   //向下转型,需 使用括号转类型,强制转换
         }
    }
      

  3.   

    我从书上看到这样一段代码就产生了这样的疑问
    File myDownfiles=new File(".\\downfiles.data");
    ObjectInputStream ois=new ObjectInputStream(myDownfiles);
    DefaultListModel model1=(DefaultListModel)ois.readObject();
    这段代码怎么知道ois.readObject()取出的原类型是DefaultListModel
      

  4.   

    5楼的老兄没有懂我的意思,加入现在已经有一个被序列化的文件,我用readObject()来读取他,返回值的类型肯定是Object,我怎么知道原来的类型并进行强制转换列
      

  5.   

    就是用强制类型转换,编程者要保证类型能转,如果不能转,会抛出异常。为了解决你的疑问,Sun不是在jdk1.5推出了泛型吗?
      

  6.   

    Object obj=is.readObject();
    楼主要是想看一下这个类的名称,可以使用String name = obj.getClass().getName();方法。
    但是,如果是用程序中的那种“知道”,就要换一种思维方式了。也就是说,你先编写一个写入文件的程序,再编一个读出文件的程序。
    既然两个程序都是你参与编写的,当然,Object是什么类型,你自己当然就知道了。如果,随便什么被序列化的文件,被读入到程序。你要判断他是什么类,就可以使用obj.getClass();方法。
    然后,在写程序,恐怕就要用到反射了。
      

  7.   

    呵呵,谁能帮我解释一下这段代码:
    File myDownfiles=new File(".\\downfiles.data"); 
    ObjectInputStream ois=new ObjectInputStream(myDownfiles); 
    DefaultListModel model1=(DefaultListModel)ois.readObject();
      

  8.   

    要给学生们讲卷子,不知道这个转型问题怎么讲,搜了几个例子,才发现这个例子最合适,也好懂。
    class   Chinese{   
                
              public   static   void   print(){   
                      System.out.println("this   is   中国人");   
                        
              }   
              
      }   
      class   Guangdongren   extends   Chinese{   
              public   static   void   print(){   
                      System.out.println("this   is   广东人   ");   
              }   
                
      }   
      class   HunanRen   extends   Chinese{   
              public   static   void   print(){   
                      System.out.println("this   is   湖南人   ");   
              }   
      }   
      class   GuangzhouRen   extends   Guangdongren{   
              public   static   void   print(){   
                      System.out.println("this   is   广州人     ");   
              }   
      }   
        
      public   class   Test   {   
                
                public   static   void   main(String   args[]){   
                          
                        Chinese   c=new   Chinese();//这样编译可以通过,但运行会抛出异常   
                          HunanRen   h=(HunanRen)c;//     这是因为向下转型错误,中国人不一定是湖南人,这里   
                                                                        //是不是可以这样理解要将c强制转换成一个HunanRen     
                          
                        HunanRen   h=new   HunanRen();//这样就没有问题,这是向上转型,   
                        Chinese   c=(Chinese)h;         //湖南人一定是中国人这是是否可以理解为将h转换成Cinese   
                    Chinaese   h=new   HunanRen();//向上转型   
                        h.print();   
                }   
          }