001/* -*- mode: Java; c-basic-offset: 2; indent-tabs-mode: nil; coding: utf-8-unix -*-
002 *
003 * Copyright © 2025 microBean™.
004 *
005 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
006 * the License. You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
011 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
012 * specific language governing permissions and limitations under the License.
013 */
014package org.microbean.attributes;
015
016import java.lang.constant.Constable;
017
018/**
019 * A value of a particular type suitable for representing as an annotation value or similar.
020 *
021 * @param <T> a {@link Value} subtype
022 *
023 * <p>{@link Value}s are <a
024 * href="https://docs.oracle.com/en/java/javase/23/docs/api/java.base/java/lang/doc-files/ValueBased.html#Value-basedClasses">value-based
025 * classes</a>.</p>
026 *
027 * @author <a href="https://about.me/lairdnelson" target="_top">Laird Nelson</a>
028 *
029 * @see ArrayValue
030 *
031 * @see Attributes
032 *
033 * @see BooleanValue
034 *
035 * @see ByteValue
036 *
037 * @see CharValue
038 *
039 * @see ClassValue
040 *
041 * @see DoubleValue
042 *
043 * @see EnumValue
044 *
045 * @see FloatValue
046 *
047 * @see IntValue
048 *
049 * @see LongValue
050 *
051 * @see ShortValue
052 *
053 * @see StringValue
054 */
055public sealed interface Value<T extends Value<T>> extends Comparable<T>, Constable
056  permits ArrayValue,
057          Attributes,
058          BooleanValue,
059          ByteValue,
060          CharValue,
061          ClassValue,
062          DoubleValue,
063          EnumValue,
064          FloatValue,
065          IntValue,
066          LongValue,
067          ShortValue,
068          StringValue {
069
070}