私は以下のコードを持っています。私は、インジェストメソッドでHandlerのraw型を使用していることから、いくつかのチェックされていない警告が出ています。私は生のタイプの警告と私の使用法を削除するための最善の方法に立ち往生しています。私の主な障害は、インジェストメソッドのパラメータがIV2GraphObjectであり、ハンドラでハンドルメソッドを呼び出そうとすると、ハンドラに境界を設定しようとするとコンパイルエラーが発生するということです。未処理の生の型警告への呼び出しを修正しました。Java
public class IV2Ingestor implements Ingestor<IV2GraphObject> {
public interface Handler<T extends IV2GraphObject> {
void handle(T iv2Object);
Set<? extends Element> getNewElements();
}
// map of handlers for supported objects
private Map<Class<? extends IV2GraphObject>, Handler<? extends IV2GraphObject>> handlers;
public static IV2Ingestor getInstance(VisalloEnv environment) {
// create a new instance
IV2Ingestor ingestor = new IV2Ingestor();
ingestor.handlers = new HashMap<>();
ingestor.handlers.put(Tweet.class, new TweetHandler(graphFactory));
ingestor.handlers.put(TwitterUser.class, new TwitterUserHandler(graphFactory));
ingestor.handlers.put(GoogleNews.class, new GoogleNewsHandler(graphFactory));
ingestor.handlers.put(VKPost.class, new VKPostHandler(graphFactory));
ingestor.handlers.put(YouTube.class, new YouTubeHandler(graphFactory));
ingestor.handlers.put(Instagram.class, new InstagramHandler(graphFactory));
// return ingestor
return ingestor;
}
@Override
public void ingest(IV2GraphObject ingestable) {
Class<? extends IV2GraphObject> ingestableClass = ingestable.getClass();
if (handlers.containsKey(ingestableClass)) {
Handler handler = handlers.get(ingestableClass);
try {
handler.handle(ingestable);
} finally {
// persist changes
graph.flush();
// notify GPWs of any new graph elements
workQueueRepository.pushElements(handler.getNewElements(), Priority.LOW);
}
}
}
コンストラクタではなく、「getInstance」があるのはなぜですか?シングルトンではないようです。なぜ、「VisalloEnv環境」を使うのですか? 'graphFactory'とは何ですか? 'ハンドラー 'に追加するこれらのクラスは何ですか?実際のエラーは何ですか? –
私は、与えられた構造で警告を完全に避ける方法はないと思います。それはちょうどあなたがどんな警告をしたいのか、どこで警告するのかという問題です。 – shmosel
'@SuppressWarnings(" rawtypes ")'が動作しないのはなぜですか?このコードがどのようにコンパイルされるのかわかりませんが、 –