Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
public interface Validator {
<T> Set<ConstraintViolation<T>> validate(T object, Class<?>... groups);
}
public interface ConstraintViolation<T> {
String getMessage();
Path getPropertyPath();
T getRootBean();
}
Set<ConstraintViolation<TaskList>> violationsTaskList = validator.validate(taskList);
Set<ConstraintViolation<TaskItem>> violationsTaskItem = validator.validate(taskItem);
public void consumeViolations(Set<ConstraintViolation<?> violations) {
// Do something meaningful...
violations.getMessage();
}
consumeViolations(....<?>) cannot be applied to consumeViolations(....<TaskList>)
我不想为每个类型T编写这个方法只是为了调用getMessage()并将其传递给下一个方法。
有可能写出这样的方法吗?我只想访问ConstraintViolation接口的方法,这些方法不依赖于类型T(如字符串getMessage())。
我想你需要的是
public void consumeViolations(Set<? extends ConstraintViolation<?>> violations) {}
或类似
public <T, V extends ConstraintViolation<T>> void consumeViolations(Set<V> violations) {}
这取决于您需要对方法中的集合执行什么操作。
问题内容: 我有一个方法以a 作为参数。 在中,我如何知道a 是还是a 是? 问题答案: 根据用户omain的回答“如果使用<?>,则意味着您将不会在任何地方使用参数化类型。要么转到特定类型(在您的情况下,似乎是),要么转到非常通用的“ 另外,我相信如果您使用问号,编译器将在运行时(类型;有效Java的第119页)消除类型不匹配的情况,绕过擦除,并有效地消除了使用泛型类型所带来的好处? 要回答发问
问题内容: 我一直在努力解决以下问题。我有一系列函数对象,每个对象都有自己的输入和输出类型,这些输入和输出类型是通过java中的泛型类型参数定义的。我想将它们排列成一个链,以便将原始数据输入到第一个函数,然后将其转换为输出类型,即下一个对象的输入类型,依此类推。当然,这对于硬代码来说是微不足道的,但是我希望代码可以插入到新的函数对象中。如果我只是忽略类型参数(仅最终输出类型),则外观如下: 这里,
现在,当我在地图上迭代时…我能以某种方式获得每个Class1对象的类型(K,V)吗??
问题内容: 因此,我正在开发这个通用的HashTable类,并且希望将其通用地用于任何数量的传入类型,并且我还想将内部存储数组初始化为LinkedList的数组(出于冲突目的),其中为确保类型安全,每个LinkedList都被预先指定为HashTable类中的泛型类型。我该怎么做?以下代码最能阐明我的意图,但当然不会编译。 问题答案: Java中的泛型不允许创建具有泛型类型的数组。您可以将数组转换
问题内容: 我想知道是否有可能编写一个接受多种通用类型的函数,如下所示: 那行得通吗?每个参数中的泛型是否意味着每个参数必须具有与泛型相同的类型T? 问题答案: 是的-可能的(虽然不是使用方法签名),是的,使用签名的类型必须相同。 使用给定的签名,必须在呼叫站点将其与单个类型(例如 或 )相关联。但是,您可以声明采用多个类型参数的方法签名 请注意,在上面的签名中,我已经声明了类型以及签名本身。因此
如何获取这个类的类型?对于上下文,我使用ModelMapper,我需要类类型T从S转换为T。 背景: 我已经尝试了N种方法,其中我放置了“//一些方法来获取类型”,但没有任何效果。例如: 或