我正在使用将参数传递为指针的函数。我需要将用 C 编写的函数转换为 JAVA ,其行为与中的行为相同 C 即可。我正在 Windows Eclipse 中为 Android 进行开发>。
int testFunction( char* firstName, char* SecomdName, char* lastname, int age);
此函数指向 char 值的3个指针并初始化它们,因此在 C 中我可以写一些东西像下面这样初始化所有三个指针:
char* v1, v2, v3;
int res = testFunction(v1, v2, v3, 54);
调用testFunction
后,变量v1, v2, v3
将使用一些值进行初始化。
int testFunction( String firstName, String secondName, String lastName, int age);
这与 C 中的功能相同,但用 JAVA 编写,但在 < em> JAVA 没有指针,这意味着我不能写这样的东西:
String v1, v2, v3;
testFunction(v1, v2, v3, 54);
如何为我的JAVA功能获得与C示例中相同的初始化行为?这可能吗?
答案 0 :(得分:3)
你可以做一些事情。您可以创建一个包含要创建的字段的bean类,例如:
public class Names {
String firstName;
String secondName;
String lastName;
int returnValue;
// getters/constructors etc ommitted...
}
然后,您的testFunction可以实例化一个Names对象并将其返回,即
Names names = testFunction(int age);
String firstName = names.getFirstName();
// etc...
另一种方法是,如果你正在处理字符串,则要传递StringBuilder对象,即
int testFunction(StringBuilder firstName, StringBuilder secondName, StringBuilder lastName, int age) {
// Use StringBuilder methods such as append to create the strings eg...
firstName.append("Bob");
}
然后在代码的其他地方你可以使用......
StringBuilder firstNameBuilder = new StringBuilder();
StringBuilder secondNameBuilder = new StringBuilder();
StringBuilder thirdNameBuilder = new StringBuilder();
testFunction(firstNameBuilder, secondNameBuilder, thirdNameBuilder, 84);
String firstName = firstNameBuilder.toString(); // firstName now equals "Bob"
/// etc...
答案 1 :(得分:2)
您必须应用“持有人”模式。粗略地说(我现在无法测试代码,但你会得到这个想法),你可以这样做:
class Holder <T>
{
public T element;
public T value() { return element; }
public void setValue(T t ) { element = t; }
}
然后将代码更改为接受Holder<String>
项。你的缺点是必须调用value()
(或获取内部element
),但这是我想到的更简单,更直接的方式(它也用于Java到IDL的映射) CORBA保留“out”引用。)
现在你可以这样做:
Holder<String> name = new Holder<String>();
int result = testFunction(name, ...);
System.out.println(name.value());
并且testFunction
的实施是不可能的:
int testFunction(Holder<String> name, ...)
{
name.setValue("whatever");
// ...
}
答案 2 :(得分:2)
你必须做这样的事情:
public class Person {
public String firstName;
public String secondName;
public String lastName;
}
int testFunction(Person person, int age) {
...
// fill person fields
}
Person person = new Person();
int res = testFunction(person, 54);
答案 3 :(得分:1)
您可以让testFunction(...)
返回一个包含三个(char基元/字符串对象)的Object。
public MyObject testFunction(v1,v1,v3,54) {
//do initialization stuff...
return new MyObject(v1, v2, v3, 54);
}
public class MyObject {
MyObject(char v1, char v2, char v3, int number) {
// something...
}
}