使用Lombok访问私有内部类

问题描述 投票:0回答:2

让我们采用静态内部类作为下一个类。

@Getter
@Setter
public class Request {
    private String contactUrl;
    private Resources resources;

    @Getter
    @Setter
    private static class Resources {
        private String basketId;
        private String customerId;
    }
}

我需要从另一个这样的类访问basketId

Request request = new Request();
request.getResources.setBasketId("5");

除非将Resources类定义为public,否则它将不会编译。

是否有其他方法使用Lombok在保持Resources私有的同时访问此字段?

java lombok
2个回答
1
投票

要保持Resources私有,您可以委派setter方法,例如:

@Getter
@Setter
public class Request {
    private String contactUrl;
    private Resources resources;

    @Getter
    @Setter
    private static class Resources {
        private String basketId;
        private String customerId;
    }

    public setBasketId(String id) {
        resources.setBasketId(id)
    }
}

或者您可以使用反射:Set private field value with reflection


0
投票

您可以使用@Delegate有效地将私有内部类拥有的每个方法“复制”到外部(并且实现只在内部调用该方法):

@Delegate private Resources resources;

注意,在签名中使用一种类型(构造函数,字段,方法等–类型的非代码方面),使得该类型比签名不那么可见,真的很奇怪:这里您有一个公共方法,该方法将有效的不可见类型(资源)返回到该文件中所没有的所有代码。这是一个坏主意;没有人可以有用地调用此方法。要么摆脱getter和setter的作用(例如,通过使用Delegate代替),要么将Resources内部类设为公共。

让我们退后一步:您要完成什么?例如,如果您不希望任何人在不了解外部资源的情况下使用该内部Resources类,则很容易做到:只需在Resources中创建一个私有构造函数,瞧。现在没有人可以创建实例,除了您的外部对象。

© www.soinside.com 2019 - 2024. All rights reserved.