質問の簡単な概要 (TLDR): JavaObjectの型が であることを確認するにはどうすればよいMap<String, Object>ですか?
私はYAMLドキュメントをString. から SnakeYAML を使用して YAML を作成しましたMap<String, Object>が、再度読み取る前に改ざんされる可能性があります。私は PKI 署名に頼りたくありません。値がいたるところにあるMap<String, Object>場合でも、YAML 表現がまだ であるかどうかを確認するだけで十分です。私はコンテンツではなくタイプObjectを気にします。
Objectでは、 anが実際に type であることを確認するにはどうすればよいMap<String, Object>ですか?
タイプ消去のさまざまな SuppressWarnings を回避しようとしている方法は次のとおりです。
Object yamlObject = yaml.load(someYamlDocumentAsString);
// I only want to proceed if this YAML object is a Map<String, Object>
if ((yamlObject instanceof Map<?, ?>)) {
Map<?, ?> propertyMap = (Map<?, ?>) yamlObject;
for (Entry<?, ?> propertyEntry : propertyMap.entrySet()) {
// I am checking each key and throwing if it's not a "String"
Object propertyKey = propertyEntry.getKey();
if (!(propertyKey instanceof CharSequence)) {
throw new BananaException("FIXME"); // FIXME
}
}
} else {
throw new CoconutException("FIXME"); // FIXME
}
上記はもっとうまくできますか?
ちなみに、Java には C# のキーワードに似たものがあるとは思いませんas(MSDN から:as演算子はキャスト操作のようなものです。ただし、変換が不可能な場合、as は例外を発生させる代わりに null を返します。)?
上記のコードの後、これに対する警告を安全に抑制できますか:
@SuppressWarnings("unchecked")
Map<String, Object> aBeautifulAndCozyMap = (Map<String, Object>) propertyMap;