Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 动态创建自定义对象_Java_Object - Fatal编程技术网

Java 动态创建自定义对象

Java 动态创建自定义对象,java,object,Java,Object,我想知道是否有一种方法可以动态创建对象,或者说不使用类对象及其属性。我通常是这样做的 ApiHelper apiHelper = new ApiHelper(); User user = new User(); user.Firstname = "FirstName"; apiHelper.send("", user); 我想在我的代码片段上完成这一点: ApiHelper apiHelper = new ApiHelper(); apiHelper.send("", new { Firstn

我想知道是否有一种方法可以动态创建对象,或者说不使用类对象及其属性。我通常是这样做的

ApiHelper apiHelper = new ApiHelper();
User user = new User();
user.Firstname = "FirstName";
apiHelper.send("", user);
我想在我的代码片段上完成这一点:

ApiHelper apiHelper = new ApiHelper();
apiHelper.send("", new { Firstname = "Firstname"});
send()上的第二个参数的数据类型为Object,该对象稍后将转换为json字符串


这是一个c#示例,java中是否有类似的示例?我有点认为,如果我在创建对象时使用第一种方法,我必须创建很多类,以符合我需要构建的对象,因此我希望如果我可以在java中使用第二种方法来实现这一点

好吧,您真正需要的是一个构造函数,它将
Firstname
作为参数

public User(String fName) {
    Firstname = fName;
}
尽管如此,在Java中,将成员大写并不像在C#中那样是惯例;应该是

stringfirstname

那你就做


apiHelper.send(“,新用户(“名字”)

从技术上讲,这在Java中是可能的。语法如下:

apiHelper.send("", new Object(){ String firstName = "Firstname"});
然而,这通常是非常无用的。您更可能要做的是创建一个接口/类来定义所需的方法和字段,并传递该方法和字段的实例

例如:

class Data{
    String firstname;
    public Data(String firstname){
        this.firstname=firstname;
    }
}

如果您不能修改
User
来添加构造函数,那么我将使用“双括号初始化”,您基本上可以在实例化该类的类中运行代码:

ApiHelper apiHelper = new ApiHelper();
apiHelper.send("", new User(){{
        Firstname = "Firstname";
    }});

然后是行
Firstname=“Firstname”在实例化后立即执行

我想我真的必须这么做,但我说我会把这作为我最后的选择。不过,正如您所说,在java中,将我的成员资本化并不是惯例。在我的例子中,我将这个obj转换为json字符串,并将其发送到用c#编写的web服务上。在这方面,属性/成员是用大写字母写的,这会产生冲突吗?我没有尝试过,但我真的不明白为什么会发生冲突。@ljpv14,为什么这是你最后的选择;你是说你必须这么做?在您澄清之后,假设这意味着您在创建并传递
用户后不需要访问该用户
,为什么其他答案不起作用?您能向我解释一下使用该语法是如何毫无用处的吗?好的,你回答了我的问题,这就是我一直在寻找的,所以我会接受你的答案。@ljpv14它通常是无用的,因为以后没有一种实用的方法来访问该值。反射应该是可能的,但通常你需要一种更直接的方法来从对象中提取数据。我没有明确指出我将使用该对象向Web服务发送数据。不是真的要在以后创建和保存/处理。所以我认为这种方法是正确的。Java中的一个简单用例是从一个方法返回多个值。在JavaScript中很容易:返回{yournewobjecthere},但在Java中就不那么容易了。我觉得它有用处。在Java中不容易的最终原因是您无法在运行时动态更改成员或访问器。