Answer: Yes. The following code shows that one may read an object from a file (in this case a Hashtable object) and use class Class and class Method to invoke the get method without type casting.
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
import java.lang.reflect.*;

class FileOps4 {
   File4 f4;
   
   FileOps4 (File4 f4) {
      this.f4 = f4;
   }
   
   void readFromFile (String filename) {
      try {
         FileInputStream fis = new FileInputStream (filename);
         ObjectInputStream ois = new ObjectInputStream(fis);
         Object h = ois.readObject();

	 Class c = h.getClass();
	 Method m = c.getMethod("get", 
				new Class[] { (new Object()).getClass()});
	 Object obj = m.invoke(h, new Object[]{ new String("one") });
	 System.out.print("Hashtable: ["+obj.toString()+"]");
	 obj = m.invoke(h, new Object[]{ new String("two") });
	 System.out.print(" ["+obj.toString()+"]");
	 obj = m.invoke(h, new Object[]{ new String("three") });
	 System.out.print(" ["+obj.toString()+"]");
	 System.out.println();

         f4.text.setText(h.toString()+"\n");
         Vector v = (Vector)ois.readObject();
         f4.text.append(v.toString()+"\n");
         fis.close();
      }
      catch (IOException e) {
         f4.messages.setText("File "+filename+" Not Found");
      }
      catch (Exception ee) {
         f4.messages.setText("Error: "+ee);
      }
   }

   public void writeToFile(String filename) {
      Hashtable h = new Hashtable();
      h.put("one", new String("Hello There"));
      h.put("two", new Integer(23));
      h.put("three", new Double(1.23));
      Vector v = new Vector();
      v.addElement(new String("Goodbye"));
      v.addElement(new Integer(43));
      v.addElement(new Double(4.34));
      v.addElement(h);
      try {
         FileOutputStream fos = new FileOutputStream (filename);
         ObjectOutputStream out = new ObjectOutputStream(fos);
         out.writeObject(h);
         out.writeObject(v);
         fos.close();
      }
      catch (IOException e) {
         f4.messages.setText("Could not write to "+filename);
      }
   }
}

public class File4 extends Applet implements ActionListener {
   JTextArea text;
   JTextField filename, messages, delimiter, number;
   JButton read, write;
   FileOps4 fo;
   
   public void init () {
      setLayout(new BorderLayout());
      Panel p = new Panel();
      p.setLayout(new GridLayout(2,1));
      Panel q = new Panel();
      q.setLayout(new BorderLayout());
      Panel r = new Panel();
      r.setLayout(new GridLayout(2,1));
      r.add(filename = new JTextField());
      r.add(new JLabel("Filename", JLabel.CENTER));
      q.add("Center", r);
      r = new Panel();
      r.setLayout(new GridLayout(2,1));
      r.add(new JLabel(""));
      r.add(new JLabel(""));
      q.add("East",r);
      p.add(q);
      q = new Panel();
      q.setLayout(new BorderLayout());
      r = new Panel();
      r.setLayout(new GridLayout(2,1));
      r.add(messages = new JTextField());
      r.add(new JLabel("Messages", JLabel.CENTER));
      q.add("Center", r);
      r = new Panel();
      r.setLayout(new GridLayout(2,1));
      r.add(new JLabel(""));
      r.add(new JLabel(""));
      q.add("East", r);
      p.add(q);
      add ("North", p);
      add ("Center", new JScrollPane(text = new JTextArea(30,30)));
      
      p = new Panel();
      p.setLayout(new GridLayout(1,3));
      p.add(read = new JButton("Read"));
      p.add(new JLabel());
      p.add(write = new JButton("Write"));
      add ("South", p);
   }
   
   public void start () {
      fo = new FileOps4(this);
      read.addActionListener(this);
      write.addActionListener(this);
   }
   
   public void actionPerformed (ActionEvent evt) {
      if (evt.getSource() == read)
         fo.readFromFile(filename.getText());
      else
      if (evt.getSource() == write)
         fo.writeToFile(filename.getText());
   }
}