You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何实现类似JavaScript传递对象作为方法参数的功能

实现方案说明

Java是静态强类型编程语言,和JavaScript的动态类型特性不同,无法直接在Object类型变量上访问自定义属性,你提供的草稿代码会直接编译报错,可按以下几种方案实现需求:


方案1:自定义POJO类(最常用,全版本Java兼容)

这是Java开发中最规范的实现方式,先定义封装属性的实体类即可:

// 自定义实体类封装属性
class UserOptions {
    // 成员变量
    private String firstName;
    private String lastName;

    // 构造方法
    public UserOptions(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    // Getter方法获取属性值
    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }
}

public class Main {
    public static void main (String[] args) {
        // 构造对象传入方法
        UserOptions exampleObject = new UserOptions("First", "Last");
        test(exampleObject);
    }

    // 参数类型指定为自定义的实体类,而非通用Object
    static void test (UserOptions options) {
        System.out.println(options.getFirstName() + " " + options.getLastName());
        // 输出: "First Last"
    }
}

方案2:使用Record(Java 16+支持,代码更简洁)

如果使用Java 16及以上版本,可以用Record快速定义不可变的数据载体类,无需手动编写Getter、构造方法等模板代码:

// 一行定义Record类,自动生成构造、Getter、equals、hashCode、toString方法
record UserOptions(String firstName, String lastName) {}

public class Main {
    public static void main (String[] args) {
        UserOptions exampleObject = new UserOptions("First", "Last");
        test(exampleObject);
    }

    static void test (UserOptions options) {
        // Record的属性访问方法直接和属性同名,无需加get前缀
        System.out.println(options.firstName() + " " + options.lastName());
        // 输出: "First Last"
    }
}

方案3:使用Map模拟动态对象(不推荐,无类型校验)

如果你确实需要类似JavaScript那种动态键值对的效果,可以用Map实现,但缺点是没有编译期类型校验,容易出现键名写错、类型转换错误的问题:

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main (String[] args) {
        Map<String, String> exampleObject = new HashMap<>();
        exampleObject.put("firstName", "First");
        exampleObject.put("lastName", "Last");
        test(exampleObject);
    }

    static void test (Map<String, String> options) {
        System.out.println(options.get("firstName") + " " + options.get("lastName"));
        // 输出: "First Last"
    }
}

内容的提问来源于stack exchange,提问作者EuleHaken

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 13:15:03