2014-02-13 2 views
0

Я действительно не знаю, что искать, и если это возможно. Я пытаюсь закодировать динамический файловый загрузчик.Определить тип литья и возврата по параметру

Это код:

public static Serializable loadSerializable(Context context, 
     String filename, Object object) { 
    final String DEBUGTAG = "Loading data" ; 
    Serializable serializable = null; 
    ObjectInputStream oin = null; 
    try { 
     File file = new File(context.getFilesDir(), filename); 
     FileInputStream in = new FileInputStream(file); 
     oin = new ObjectInputStream(in); 
     Object readElement = oin.readObject(); 
     serializable = (Serializable) readElement; // here I want dynamic casting 
     Log.d(DEBUGTAG, "Success : " + filename); 
    } catch (FileNotFoundException e) { 
     Log.d(DEBUGTAG, "File not found"); 
    } catch (StreamCorruptedException e) { 
     Log.d(DEBUGTAG, "Stream Corrupted"); 
    } catch (IOException e) { 
     Log.d(DEBUGTAG, "IOException"); 
    } catch (ClassNotFoundException e) { 
     Log.d(DEBUGTAG, "Class not Found"); 
    } catch (NullPointerException e) { 
     Log.d(DEBUGTAG, "NullPointer - File does not exist yet"); 
    } finally { 
     if (oin != null) 
      try { 
       oin.close(); 
      } catch (IOException e) { 
       Log.d(DEBUGTAG, "IOException - Stream not closed"); 
      } 
    } 
    return serializable; 
} 

То, что я хочу сделать сейчас, вместо того, чтобы создать новый метод для каждого отдельного объекта, я хочу использовать 3-й аргумент (объект или любой другой) для отливки типа.

Так что я мог бы написать String myString = loadSerializable(this, test.dat, String) или ArrayList<Fragment> = loadSerializable(this, test.dat, ArrayList<Fragment>) и так далее .... Помощь оценили

ответ

0

Что-то вроде

public static <T> T loadSerializable(Context context, String filename) { 
    // ... 
    T t = (T) readElement; 
    // ... 
    return t; 
} 
+0

Спасибо .. работал отлично – chrizz42

Смежные вопросы