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}