代码之家  ›  专栏  ›  技术社区  ›  Aidenhjj

有没有办法只使用给定条件的递归类型绑定字段?

  •  2
  • Aidenhjj  · 技术社区  · 8 年前

    Parameter 包含 value 字段,可以是 int float , string 或者前面类型之一的数组

    public class Parameter<T> {
        private final String name;
        ...
        private final Utils.Range<T> range;
        private final RANGE_TYPE range_type;
        private final T value;
    
        public enum RANGE_TYPE {CONTINUOUS, DISCREET};
        ...
    
        /* constructor / builder class etc */
        ...
    }
    

    它还必须有一个范围,我已经实现如下:

    public class Utils {
        /**
         * Collection of helper classes
         */
        public static class Range<T extends Comparable<T>> {
            /**
             * Generic Inclusive Range (designed for int / float / double).
             */
            private final T start;
            private final T end;
    
            public Range(T start, T end) {
                this.start = start;
                this.end = end;
            }
    
            public boolean contains(T number) {
                return (number.compareTo(start) > 0 && number.compareTo(end) < 0);
            }
    
        }
    }
    

    参数 类来自一个restapi,它为每个“块”输出JSON(我还有一个 Block 类表示块的层次结构(基本上是DAG,但每个块可以包含子块)。我想要一种通用的方法来封装这个参数数据,而不直接依赖restapi的数据结构。

    range 参数 Range 类本身是不兼容的。我做不到 参数 类扩展 Comparable T 可以是容器(列表、数组列表等)。注:如果 T 是一个容器类,将按元素检查范围。

    我是不是走错方向了?在python中,我将把它实现为dict,而不用太担心值的类型。

    2 回复  |  直到 8 年前
        1
  •  1
  •   Illyes Istvan    8 年前

    范围的泛型类型和from参数的泛型类型之间有依赖关系吗?

    如果没有,您可以在参数类中的2个泛型参数中将它们分开,如下所示。

    public static class Parameter<T, R extends Comparable<R>> {
        private final String name;
        private final Range<R> range;
        private final RANGE_TYPE range_type;
        private final T value;
    
        2
  •  1
  •   Michael    8 年前

    如果需要在内部创建范围,参数还必须强制此约束。

    class Parameter<T extends Comparable<T>> 
    

    RANGE_TYPE 应该是 RangeType .