2012-08-28 83 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

相關問題