在Java中,我可以有多个有界类型参数,但可以是可选的

在Java中,我可以有多个有界类型参数,但可以是可选的,java,optional-parameters,bounded-types,Java,Optional Parameters,Bounded Types,在这种情况下,我创建一个数据模型类,该类具有特定类所需的所有数据点。然而,根据类中调用的内容,它并不需要所有变量。数据模型有多个有界类型参数,但是如果不是全部使用,其中的一些参数可以是可选的吗 例如: public class DataModel<OBJ extends Object, EXCEPT extends Exception, MODEL extends BaseModelClass> { } 公共类数据模型{ } 然后,当我实例化它时,我可能不需要模型,而是希望执行以

在这种情况下,我创建一个数据模型类,该类具有特定类所需的所有数据点。然而,根据类中调用的内容,它并不需要所有变量。数据模型有多个有界类型参数,但是如果不是全部使用,其中的一些参数可以是可选的吗

例如:

public class DataModel<OBJ extends Object, EXCEPT extends Exception, MODEL extends BaseModelClass> {
}
公共类数据模型{
}
然后,当我实例化它时,我可能不需要模型,而是希望执行以下操作:

DataModel<ClassA,RunTimeException,null> data = new DataModel<ClassA,RunTimeException,null>();
DataModel data=newdatamodel();
其中ClassA是一个已定义的类,它在代码的另一部分中扩展对象,BaseModel是一个公司基础模型,它有一些非常常见的部分


因此,问题是这样做是否可以使一些应用于此类中未用于特定子方法的字段的有界类型参数成为可选的?

在声明泛型变量时,不能仅指定泛型类的一些参数化类型:这将是一个编译错误。 根据定义的边界指定泛型类的所有参数化类型并使其有效,或者应使用原始类型

请注意,如果不想为以下对象定义更具体的类型,则可以声明与lowerbound通配符相同的类型:

DataModel<ClassA,RunTimeException,BaseModelClass> data = new DataModel<>();
DataModel data=newdatamodel();
或通配符,例如(如Lexicore所述):

DataModel data=newdatamodel();
根据您的要求,我想补充一点,泛型并不是为了向类添加/删除新方法而设计的。这些设计用于更精确地键入类的实例。
此外,在客户端类使用的类中定义泛型越多,客户端使用泛型可能就越麻烦。

您怎么可能不需要
模型
?您的类声明在一些
扩展
实现
、内部类、字段或方法声明中使用它,否则为什么要使用type参数呢?必须指定类型。@原因是,将使用此数据模型的类执行各种异常操作(有时创建一个,有时作用于抛出的一个)。其中之一是基本上做日志记录,当不需要日志记录模型时。我们真正需要的是异常和一些作为变量的业务附加。然而,当我创建一个根据我们的业务标准格式化的异常时,我需要模型和异常(在本例中是要创建的异常)。因此,实用程序类确实共享功能,但在方法中有不同的特定需求。如果您确实不打算使用类中使用
模型
类型参数的部分,您可以使用上限(
BaseModelClass
)或其任何其他子类型。您甚至可以创建一个带有
private
构造函数的伪子类,因此它是不可实例化的,例如
NoBaseModelClass
--但是,如果您需要使用不包含所有部分的
DataModel
类,则表明您的类可能是一个@lexicore我试过了,但没用。不会编译。感谢我在
DataModel data=newdatamodel()中思考
更好地传达了“我在这里不关心这种类型”的想法(与
数据模型相比)。
DataModel<ClassA,RunTimeException,?> data = new DataModel<>();