You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Java委托实现疑问:是否必须创建对象?能否仅用类类型变量?

Java委托机制:对象实例的必要性解析

嘿,我来帮你把这个Java委托的问题讲明白!

首先得明确:Java本身没有像C#那样原生的delegate关键字语法,我们平时说的“委托机制”,大多是指通过持有其他类的对象实例,转发方法调用的行为——本质是用组合来实现行为复用。

核心问题1:实现委托必须创建对象吗?

答案是肯定的。
你看你定义的Point类里的getXCoord()getYCoord()都是实例方法,这类方法属于对象而非类本身,必须通过Point的具体实例才能调用。如果只定义一个Point类型的变量但不指向实际对象,这个变量就是个空引用,调用它的方法会直接抛出NullPointerException

只有静态方法可以不用创建对象,直接通过类名.方法名调用,但静态方法不属于对象的行为,这并不是委托机制的典型应用场景——委托强调的是对象之间的行为协作,必然依赖实例对象。

核心问题2:Circle里定义Point类型变量是否可行?

完全可行!这正是实现委托的标准写法。
举个完整的例子,你可以这么写Circle类:

public class Circle {
    // 定义Point类型的成员变量,用来持有圆心对象的引用
    private Point center;
    private double radius;

    // 通过构造方法传入Point的实例,完成委托对象的绑定
    public Circle(Point center, double radius) {
        this.center = center;
        this.radius = radius;
    }

    // 委托调用Point的方法,获取圆心的X坐标
    public double getCenterX() {
        return center.getXCoord();
    }

    // 同理,委托获取Y坐标
    public double getCenterY() {
        return center.getYCoord();
    }
}

这里的center就是Point类型的变量,但它必须指向一个已经创建好的Point对象(比如new Point()或者外部传入的实例),这样才能正常完成委托调用。

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

火山引擎 最新活动