ที่จริงมีค่าโทษมิได้ออกเทียบเท่าคำหลักในJavaภาษาเท่าที่ผมทราบ อย่างไรก็ตามฉันเพิ่งเปลี่ยนรหัสC #เป็นJavaที่ใช้ออกไปพารามิเตอร์และจะแนะนำสิ่งที่ฉันเพิ่งทำไป คุณควรรวมอ็อบเจกต์ใด ๆ ลงในคลาส wrapper และส่งผ่านค่าที่รวมอยู่ในอินสแตนซ์วัตถุ wrapper ดังนี้
ตัวอย่างง่ายๆสำหรับการใช้ Wrapper
นี่คือคลาส Wrapper ;
public class Wrapper {
public Object ref1; // use this as ref
public Object ref2; // use this as out
public Wrapper(Object ref1) {
this.ref1 = ref1;
}
}
และนี่คือรหัสทดสอบ
public class Test {
public static void main(String[] args) {
String abc = "abc";
changeString(abc);
System.out.println("Initial object: " + abc); //wont print "def"
Wrapper w = new Wrapper(abc);
changeStringWithWrapper(w);
System.out.println("Updated object: " + w.ref1);
System.out.println("Out object: " + w.ref2);
}
// This won't work
public static void changeString(String str) {
str = "def";
}
// This will work
public static void changeStringWithWrapper(Wrapper w) {
w.ref1 = "def";
w.ref2 = "And this should be used as out!";
}
}
ตัวอย่างโลกแห่งความจริง
วิธี AC # .NET โดยใช้พารามิเตอร์ out
ที่นี่มี.NET c #วิธีการที่จะใช้ออกคำหลัก;
public bool Contains(T value)
{
BinaryTreeNode<T> parent;
return FindWithParent(value, out parent) != null;
}
private BinaryTreeNode<T> FindWithParent(T value, out BinaryTreeNode<T> parent)
{
BinaryTreeNode<T> current = _head;
parent = null;
while(current != null)
{
int result = current.CompareTo(value);
if (result > 0)
{
parent = current;
current = current.Left;
}
else if (result < 0)
{
parent = current;
current = current.Right;
}
else
{
break;
}
}
return current;
}
Java เทียบเท่าของรหัส C # ที่ใช้พารามิเตอร์ out
และJava ที่เทียบเท่ากับวิธีนี้ด้วยความช่วยเหลือของคลาส wrapperมีดังนี้
public boolean contains(T value) {
BinaryTreeNodeGeneration<T> result = findWithParent(value);
return (result != null);
}
private BinaryTreeNodeGeneration<T> findWithParent(T value) {
BinaryTreeNode<T> current = head;
BinaryTreeNode<T> parent = null;
BinaryTreeNodeGeneration<T> resultGeneration = new BinaryTreeNodeGeneration<T>();
resultGeneration.setParentNode(null);
while(current != null) {
int result = current.compareTo(value);
if(result >0) {
parent = current;
current = current.left;
} else if(result < 0) {
parent = current;
current = current.right;
} else {
break;
}
}
resultGeneration.setChildNode(current);
resultGeneration.setParentNode(parent);
return resultGeneration;
}
คลาส Wrapper
และคลาส wrapper ที่ใช้ในโค้ด Java นี้มีดังต่อไปนี้
public class BinaryTreeNodeGeneration<TNode extends Comparable<TNode>> {
private BinaryTreeNode<TNode> parentNode;
private BinaryTreeNode<TNode> childNode;
public BinaryTreeNodeGeneration() {
this.parentNode = null;
this.childNode = null;
}
public BinaryTreeNode<TNode> getParentNode() {
return parentNode;
}
public void setParentNode(BinaryTreeNode<TNode> parentNode) {
this.parentNode = parentNode;
}
public BinaryTreeNode<TNode> getChildNode() {
return childNode;
}
public void setChildNode(BinaryTreeNode<TNode> childNode) {
this.childNode = childNode;
}
}