質問の簡単な概要 (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;