私は、オブジェクトをディスクに永続化するためのCacheオブジェクトを持っています。これを実装した方法で、@SupressWarningsを使用する必要があります。私はJavaのエキスパートではありませんが、これはコードの臭いのようです。私がここでやっていることを実行するための「より良い」方法があるかどうかは疑問です(たとえば、特定のタイプをインスタンス化できるようにこの値を読み取っていますか?)。 GET()オブジェクトの任意の型を返すことができますので、私は今、時に元の型に戻し、それをキャストする必要があり@SuppressWarnings(「未チェック」)を使用しなくて済むようにするにはどうすればいいですか?
/**
* Write object o to cache file
*
* @param cacheName
* @param o
* Serializable object to write to cache
*/
public static void put(String cacheName, Serializable o) throws IOException {
FileOutputStream fos = new FileOutputStream(getHashedFileName(cacheName));
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(o);
fos.close();
}
/**
* Get an object from the cache. Caller should use exists() before calling
* here to make sure the cache item exists otherwise Exception will be
* thrown
*
* @param cacheName
* @return Object from cache
*/
public static Object get(String cacheName) throws CacheNotFoundException,
IOException, ClassNotFoundException {
FileInputStream fis = new FileInputStream(getHashedFileName(cacheName));
ObjectInputStream ois = new ObjectInputStream(fis);
Object o = ois.readObject();
return o;
}
:
マイCacheオブジェクトは、この(簡潔にするため削除関連のないコード)のように見えます私はキャッシュから読みました。コードに近い@SuppressWarnings
を動かす示唆人々のために、注釈が宣言されている行のみを使用することができので、この:編集
class somethingDoingSomeWork {
/**
* Save all work done to the cache.
* @throws IOException
*/
public void saveToCache() throws IOException {
Cache.put(getCacheKey(), (MyObject<String>) summary);
}
/**
* Repopulate from cache
*/
@SuppressWarnings("unchecked")
public boolean loadFromCache() throws IOException, CacheNotFoundException,
ClassNotFoundException {
// Code removed, checking for existence of cache, etc.
// Cast required here, and this row generates unchecked warning
summary = (MyObject<String>) Cache.get(getCacheKey());
return true;
}
}
:私は、私が最初の場所での警告の生成を避けることができればと思いまして助けてくれません
また、ジェネリックスの助けを借りても、それはCache.get()
メソッドに問題を移しているようです。最善の解決策は、このように表示されます。http://www.velocityreviews.com/forums/t499693-how-do-you-prevent-unchecked-cast-warning-when-reading-from-objectinputstream.html
メソッド全体ではなく、@SuppressWarnings( "unchecked") 'を文に使用できることをご存知でしたか? – adarshr
おそらくジェネリックスを使用できますか? – hage
無関係ですが、キャッシュをインスタンスにしてから、静的メソッドの代わりに通常のメソッドを使用する必要があります。 – Luciano