我是Java的新手,也是Python的新手,所以我不太了解泛型,但我试图制作一个包含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);
}
}
}
我要推送到此Parameter
类的数据来自REST API,该API为每个“块”吐出JSON(我也有一个Block
类,用于表示块-基本上是DAG,但每个块可以包含子块)。我想要一种封装这种参数数据的通用方法,而不必直接依赖REST API的数据结构。
问题在于,range
类的Parameter
字段与Range
类本身之间的通用类型不兼容。我不能使Parameter
类扩展Comparable
,因为T
可以是一个容器(列表,数组列表等)。注意:如果T
是容器类,则将按元素检查范围。
我是从错误的方向来的吗?在python中,我会将其实现为dict,而不必过多担心值的类型。
答案 0 :(得分:1)
Range的通用类型和Parameter的通用类型之间是否有任何依存关系?
如果没有,您可以将它们分为两个以下的Parameter类中的通用参数。
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;
答案 1 :(得分:1)
范围的通用类型参数必须是可比较的。参数的通用类型参数不一定是可比较的。
如果您需要在内部创建范围,则参数也必须强制执行此约束。
class Parameter<T extends Comparable<T>>
顺便说一句,按照惯例,所有类和枚举都应为驼峰式。 RANGE_TYPE
应该是RangeType
。