【再谈Java泛型---下】教程文章相关的互联网学习教程文章

java-使用泛型时失去类型安全性【代码】

我有一个实用程序类(ListUtils)用于深层复制列表.该类中的重要方法是复制,定义如下:public static <T extends ICopy> List<T> copy(List<T> xs) {LinkedList<T> newList = new LinkedList<>() ;for(T x : xs) {newList.add(x.<T> copy()) ;}return xs; }ICopy接口又由以下方式提供:public interface ICopy {<T extends ICopy> T copy() ; }然后,为强制每个AST节点实现ICopy,IAstNode定义如下:public interface IAstNode extend...

java-何时将类编写为泛型类【代码】

我上课可以说Class Rectange{int height;int side; }我可以在什么情况下使此类成为通用类?如何确定我们要编写泛型类?一个实际的例子可能会很好. 更新资料 >使类通用的用例是什么?>我们将使用泛型的现实生活场景?解决方法:实际示例:我需要一个简单的处理器,该处理器将采用许多值并根据自然顺序返回最高,最低和中位数.我不知道它将操作哪种类型的对象(或者我知道,但是不想将其限制为仅使用一种特定类型),并且我也不希望它接受Ob...

java-如何修复此泛型示例【代码】

我有一个泛型问题,并创建了一个简化示例.import java.util.HashMap; import java.util.Map;public class Test {public interface Handler<T> {public String getType();public T getInitMessage();public void process(T message);}public static class MessageType1 {// Message type 1}public static class MessageType2 {// Message type 2}public static void main(String[] args) {Handler<MessageType1> messageType1Handler...

Java泛型类型参数可能为变量吗?【代码】

是否可以通过变量将类型实参提供给泛型类?private static final Class clazz = String.class;ArrayList<clazz> list = new ArrayList<>();在这个例子中,我得到一个编译器错误.那为什么不可能呢?解决方法:就像@Jesper所说的那样,您试图跨越编译时和运行时范围. 首先,要了解Java泛型是严格的编译时功能-一旦将Java源代码编译为字节码,在源代码中看到的“泛型”就消失了.我建议阅读type erasure,以获取更多有关该主题的信息. 那么,编...

java-Hibernate的泛型【代码】

后续课程无法使用Hibernate加载package com.project.alice.entities;import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToOne; import javax.persistence.Table;import com.fasterxml.jackson.annotation.JsonProperty;@Table @Entitypublic class AnyInformation<T, K> { @Id @GeneratedValue(st...

Java泛型:“嵌套”类型参数?【代码】

这个问题已经在这里有了答案: > What is a raw type and why shouldn’t we use it? 15个编辑:是的,这可能是重复的.但是,另一个问题类似于“什么是电锯,我该如何使用它?”我的意思更像是“我正在尝试在这台机器上钻一个孔,它不起作用-怎么了?”.当然答案是“不要用电锯!”一旦知道要用电锯就可以轻松找到. 但是我什至不知道我的问题与“原始类型与通配符”有关,因此...

Java泛型访问错误【代码】

对于Java泛型的问题,我可能需要一些帮助.我构建了一个小例子来说明我的意思. 处理程序package generalizingTest;public class Handler<S extends Server<?>> {public S server;public Handler(S server) {this.server = server;} }子处理程序package generalizingTest;public class SubHandler<S extends Server<?>> extends Handler<S> {public SubHandler(S server) {super(server);}public void subHandlerMethod() {}}服务器pa...

java-如何实现泛型类型的equals?【代码】

假设我有一个像这样的通用容器类型:public final class Container<T> {public final T t;public Container(final T t) {this.t = t;} }我想实现等于以使通过:final Container<Object> a = new Container<>("Hello"); final Container<String> b = new Container<>("Hello");assertNotEquals(a, b);实例a和b应该不同,因为它们的类型参数T不同. 但是,由于要擦除,因此很难做到.例如,此实现不正确:@Override public boolean equals(...

Java泛型-类型转换问题【代码】

我有一个通用方法,该方法接受类类型和要更新的该类的字段.例如:class A {private int a;private int b; }class B {private int c;private int d; }在运行时,如果我们将类类型传递为“ A.class”,而将fieldstoBeUpdated传递为“ b”,那么访问该特定类的字段的getter / setter方法的最佳方法是什么,以便我们可以修改字段.public <T> void find(T clazz, List<String> fieldsToBeUpdated) { List<T> collectionList = findAll((Class...

java-Mockito匹配器以匹配具有泛型和供应商的方法【代码】

我正在使用Java 1.8.0_131,Mockito 2.8.47和PowerMock 1.7.0.我的问题与PowerMock无关,它已发布给Mockito.when(…)匹配器. 我需要一种模拟此方法的解决方案,该方法由我的受测类调用:public static <T extends Serializable> PersistenceController<T> createController(final Class<? extends Serializable> clazz,final Supplier<T> constructor) { … }从被测类中调用该方法,如下所示:PersistenceController<EventRepository> ...

Java-Kotlin:泛型和方差【代码】

我想在Throwable上创建一个扩展函数,给定一个KClass,它以递归方式搜索与该参数匹配的根本原因.以下是一种可行的尝试:fun <T : Throwable> Throwable.getCauseIfAssignableFrom(e: KClass<T>): Throwable? = when {this::class.java.isAssignableFrom(e.java) -> thisnonNull(this.cause) -> this.cause?.getCauseIfAssignableFrom(e)else -> null }这也适用:fun Throwable.getCauseIfAssignableFrom(e: KClass<out Throwable>): ...

Java泛型与泛型类型参数【代码】

我在一课中有以下方法:void delete(ClassA a) {//.... }void delete(ClassB b) {//... }void delete(List<ClassA> list) {for (ClassA a: list) {delete(a);} }void delete(List<ClassB> list) {for (ClassB b: list){delete(b);} }对于前两种方法,重载工作正常.但是第三种方法和第四种方法之间存在冲突. 是否可以用一种方法替换它们?我尝试了以下方法,这是不正确的:void delete(List<? extends Object> list){for (Object o: l...

java-向子级添加更多泛型类型,以泛型扩展父级【代码】

我想提高抽象水平.我有public abstract class CrudRepositoryDtoConverter<R extends CrudRepository<E, Integer>, E, D> implements CrudDTO<D>我想将其用作另一个抽象类的父类public abstract class AbstractController我尝试了多次组合,但没有成功,例如public abstract class AbstractController<K extends CrudRepositoryDtoConverter<R extends CrudRepository<E, Integer>, E, D>> {@Autowiredprivate K repository;}这个不能...

误解java中的泛型【代码】

我试图了解Java中的泛型.private List<Own> l = new ArrayList<Own>();我有以下错误:no instance of Typed array variable T exist so that List<Own> conform to T[]当我在需要T []的方法(readTypedArray)中传递它时.private List<Own> list = new ArrayList<Own>();private OwnParceable(Parcel in) {in.readTypedArray(list, CategoriesParceable.CREATOR); }解决方法:in.readTypedArray()中的方法需要一个数组T [],但是您传递...

java-创建泛型类列表【代码】

我有一个实用程序方法,可以从某些对象中创建一个元素列表:public static final <T> List<T> list(T t) {final List<T> rv = new ArrayList<>();rv.add(t);return rv; }我也有一个接受类型为List< Class<?>>的参数的方法.因此,我必须创建该类型的对象.这是我尝试做的事情:final Class<?> aClass = Integer.class; final List<Class<?>> trivialListOfClasses = list(aClass);……这失败了:[javac] /some/path/Foo.java:41: erro...