【发布时间】:2018-10-30 17:13:39
【问题描述】:
我是 Java 新手,来自 Python,所以我不太了解泛型,但我正在尝试创建一个包含 value 字段的通用 Parameter 类,它可以是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);
}
}
}
我推送到这个 Parameter 类的数据来自一个 REST API,它为每个“块”吐出 JSON(我还有一个 Block 类,它表达了块的层次结构 - 基本上是一个DAG,但每个块可以包含子块)。我想要一种通用的方法来封装这个参数数据,而不是直接依赖于来自 REST API 的数据结构。
问题是,Parameter 类中的 range 字段与 Range 类本身之间的泛型类型不兼容。我不能让Parameter 类扩展Comparable,因为T 可以是一个容器(List、ArrayList 等)。注意:如果T 是一个容器类,则将按元素检查范围。
我是从错误的方向来的吗?在 python 中,我会将其实现为 dict,而不必太担心值的类型。
【问题讨论】:
-
T是一个数组的用例是什么?你是怎么用的? -
@ernest_k - 我尝试使用的 JSON 中的值字段可以是
float/int/etc或float[](甚至是float[][]),范围字段适用如果它是一个集合,则在元素方面。
标签: java oop generics design-patterns