2012-08-28 74 views
0
列表

里面,我想指的是同一个实例对象多次:snakeYaml引用一个对象的同一个实例多次

- text: Here is an object with some data that will allow an image to be generated 
    image: &FirstIm 
     imageType: ABC 
     otherTypE: CB 
- text: Later on, lets show you the same image again! 
    image: *FirstIm 

我在做什么是产生使用的图像提供的属性并将其缓存到图像对象中。由于具体的实现,我无法再生成图像,所以我想回顾一下图像对象的特定实例。

不幸的是,snakeYAML将上述视为“哦,所以你想要另一个对象,但是与FirstIm具有相同的属性”,所以当我检查第二个图像对象缓存时,没有任何内容。我需要的行为是“你再次想要FirstIm,好吧,生病放在那里”。

有没有什么办法实现这一点,而不使用图像对象中的某种字符串来引用一些更高级别的缓存?

希望这是有道理...

+0

我是一名SnakeYAML开发人员,我不明白这个问题。什么是'当我检查第二个图像对象缓存'? – Andrey

+0

嗨,对不起,不好意思。将问题简化为希望更简单 - 如果“mylist”是解析上述代码段的结果对象,则可以执行mylist.get(0).text,它会给出“Here is a object with ...” 。如果我做mylist.get(0).image.imagecache = someImageIMade,那么如果我阅读mylist.get(1).image.imagecache我不会找回someImageIMade。所以我怎么能告诉snaleyaml“我希望从字面上相同的实例在这里” – Sam

+0

嗨安德烈,只是一个快速,一个,snakeYAML绝对没有问题(看看我对maslovalex的回答) – Sam

回答

1

我觉得有一些问题,在您的代码或我还是不明白的问题,因为从你的问题YAML通过测试就好了。

无法在注释中放置代码。所以在这里。

import java.util.List 
import java.util.Map 
... 
Yaml yaml = new Yaml(); 
List load = yaml.loadAs("- text: Here is an object with some data that will allow an image to be generated\n image: &FirstIm\n imageType: ABC\n otherTypE: CB\n- text: Later on, lets show you the same image again!\n image: *FirstIm", List.class); 
assertSame(((Map)load.get(0)).get("image"), ((Map)load.get(1)).get("image")); 
+0

正确的,虐待给这个另一个尝试。 – Sam

+0

对,你是在砰的一声。 Yaml不是我的问题。我使用的是播放框架,我相信它试图通过一些线程来使用魔术来访问对象,这意味着实际的图像生成会被执行两次,多么令人讨厌。该死的魔法!一些小心使用同步methinks的时间。非常感谢您的帮助,虽然maslovalex :) – Sam

相关问题