我正在尝试使用codemodel生成下面的代码,但我不知道如何创建匿名类语法.我在codemodel文档中找不到它(https://codemodel.java.net/nonav/apidocs/index.html?com/sun/codemodel)
ContentProducer cp = new ContentProducer() {
public void writeTo(OutputStream outstream) {
try {
Writer writer = new OutputStreamWriter(outstream, "UTF-8");
writer.write("<product><descricao>Update de descricao</descricao></product>");
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
};
Run Code Online (Sandbox Code Playgroud)
我可以使用下面的代码来实例化变量"ContentProducer",但我不知道如何在构造函数旁边实现writeTo方法.
JClass ContentProducer = events.ref(org.apache.http.entity.ContentProducer.class);
JVar contentProducer = tryBlock.body().decl(ContentProducer, "contentProducer").init(JExpr._new(ContentProducer));
Run Code Online (Sandbox Code Playgroud) 我有两节课.具有array(ArrayStorage)和另一个(ArrayConsumer)的一个只有一个变量,它将作为数组的简单引用.
我使用添加一个新元素到数组$my_array.然后我检查一下新元素是否可见$obtained_array.但是测试失败了,因为它无法找到新元素.他们表现得像是不同的阵列.他们不应该指向相同的阵列吗?
public function testArrayMadness() {
$arrayStorage = new ArrayStorage();
$my_array = $arrayStorage->getArray();
$arrayConsumer = new ArrayConsumer($my_array);
$obtained_array = $arrayConsumer->getArray();
$my_array[3]='c';
$this->assertContains('c', $obtained_array);
}
}
class ArrayStorage {
private $my_array=[1=>'a',2=>'b'];
function getArray() { return $this->my_array; }
}
class ArrayConsumer {
private $obtained_array;
function __construct($array) { $this->obtained_array=$array; }
function getArray() { return $this->obtained_array; }
}
Run Code Online (Sandbox Code Playgroud)
更新: 我在Java测试中做了同样的事情,它给了我一个indexOutOfBoundsException.这是否意味着php和java在这方面的工作方式相同,或者我的代码有问题吗?
@Test
public void testArrayMadness() {
ArrayStorage arrayStorage = new ArrayStorage();
List<String> my_list = arrayStorage.getList();
ArrayConsumer arrayConsumer …Run Code Online (Sandbox Code Playgroud)