All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.iohao.game.common.kit.attr.AttrOptionDynamic Maven / Gradle / Ivy

/*
 * ioGame
 * Copyright (C) 2021 - present  渔民小镇 ([email protected][email protected]) . All Rights Reserved.
 * # iohao.com . 渔民小镇
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see .
 */
package com.iohao.game.common.kit.attr;

import java.util.Objects;
import java.util.function.Consumer;
import java.util.function.Supplier;

/**
 * 动态属性 (类型明确的)
 * 
 *     实现该接口的对象, 都会提供动态属性机制
 *     避免类型转换
 * 
* AttrOptionDynamic options = ...; *
 *     使用示例 - 获取属性 :
 *     AttrOption<Long> timeKey = AttrOption.valueOf("myLongValue");
 *     // set long value
 *     this.option(timeKey, 123L);
 *     // get long value
 *     long val = this.option(timeKey);
 *
 *     AttrOption<Integer> intKey = AttrOption.valueOf("myIntegerValue");
 *     // set int value
 *     this.option(intKey, 123);
 *     // get int value
 *     int age = this.option(intKey);
 *
 * 
*
 *     如果你使用了lombok, 推荐这种方式. 只需要在对象中新增此行代码
 *     final AttrOptions options = new AttrOptions();
 * 
* * @author 渔民小镇 * @date 2022-01-31 */ public interface AttrOptionDynamic { /** * 获取动态成员属性 * * @return 动态成员属性 */ AttrOptions getOptions(); /** * 获取选项值。 *

* 如果选项不存在,返回默认值。 * * @param option 选项值 * @return 如果 option 不存在,则使用默认的 option 值。 */ default T option(AttrOption option) { return this.getOptions().option(option); } /** * 获取选项值。 *

* 如果选项不存在,返回设定值。 * * @param option 选项值 * @param value 设定值 * @return 如果option不存在,则默认的设定值。 */ default T optionValue(AttrOption option, T value) { T data = this.option(option); if (Objects.isNull(data)) { return value; } return data; } /** * 设置一个具有特定值的新选项。 *

* 使用 null 值删除前一个设置的 {@link AttrOption}。 * * @param option 选项值 * @param value 选项值, null 用于删除前一个 {@link AttrOption}. * @return this */ default AttrOptions option(AttrOption option, T value) { return this.getOptions().option(option, value); } /** * 如果动态属性存在,则执行给定的操作,否则不执行任何操作。 * * @param option option * @param consumer 给定的操作。只有 option 的值存在且不为 null 时,才会执行的操作。 * @param t */ default void ifPresent(AttrOption option, Consumer consumer) { T data = this.option(option); if (Objects.nonNull(data)) { consumer.accept(data); } } /** * 如果动态属性值为 null,则执行给定的操作,否则不执行任何操作。执行给定操作后将得到一个返回值,该返回值会设置到动态属性中。 * * @param option option * @param supplier 给定的操作。当 option 的值为 null 时,才会执行的操作 * @param t */ default void ifNull(AttrOption option, Supplier supplier) { T data = this.option(option); if (Objects.isNull(data)) { this.option(option, supplier.get()); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy