JShell:访问由Snippets创建的对象

时间:2018-03-16 10:48:16

标签: jshell

我对某些事情感到非常困惑,我希望能有一些见解。

假设我想构建一个可视化JShell内部内容的GUI,即片段创建的对象如何相互引用,以及Snippets创建的对象包含在我运行的JShell实例中。如何访问这些对象,最重要的是,如何访问它们相互引用的方式?

一个具体的例子:我创建一个JShell实例,传递一些由用户创建的片段,这会导致创建一个例如ArrayList,一些对象,并将所述对象添加到所述ArrayList。

如何访问此ArrayList及其中包含的对象以在GUI中显示它?

进一步澄清:

//say I create a Jshell:  
JShell jShell = JShell.create();  
//Which then evauletes user code passed from the GUI:  
jShell.eval(userCode)  

//userCode could be following lines each passed as separate Strings:  
“ArrayList<TestObject> allObj = new ArrayList<TestObject>();”  
“TestObject tst = new TestObject();”  
“TestObject tst2 = new TestObject();”  
“allObj.add(tst);”  
“allObj.add(tst2);”  

如何访问“allObj”?

如何访问“tst”及其指向的对象? (“tst”指向的“TestObject”实例);

我知道eval()会返回一个包含已更改/添加的片段的SnippetEvents列表,但是,我无法理解如何访问这些片段创建的对象。

1 个答案:

答案 0 :(得分:0)

假设您的类路径可以访问TestObj,您可以在该对象上实现Serializable。完成eval后,自动运行另一个序列化输出的方法。然后,您可以在代码中反序列化该对象。