Tag: generics

<T延伸是什么意思?

我见过如下所示的方法: protected T save( T Acd, boolean en) { 它有什么作用? 在Java中调用的这些类型的方法声明是什么?

使Java父类方法返回子类的对象的方法

当从子类对象调用此方法时,是否有任何优雅的方法使Java方法位于子类的父类返回对​​象中? 我想在不使用其他接口和额外方法的情况下实现它,并且在没有类强制转换,辅助参数等的情况下使用它。 更新: 对不起,我不太清楚。 我想实现方法链接,但我对父类的方法有问题:当我调用父类方法时,我无法访问子类方法… 我想我已经提出了我的想法的核心。 所以这些方法应该返回this.getClass()类的this对象。

从指定它返回Collection 的方法返回Collection

我正在尝试编写一个方法来返回一个集合(例如Arraylist),该集合使用generics声明为包含父类或扩展父类的类 。 对于此方法,集合中的对象将始终用作父类的实例,但在其他上下文中,它们的使用方式不同,因此它们被单独保存。 例如: import java.util.ArrayList; import java.util.Collection; public class TestClass { public static int PARENTTYPE=0; public static int CHILDTYPE=1; Collection parentHolder=new ArrayList(); Collection childHolder=new ArrayList(); public TestClass(){ } public Collection getHolder(int type){ if (type==PARENTTYPE){ return parentHolder; }else if (type==CHILDTYPE){ return childHolder; //<–incompatible types }else{ throw new RuntimeException("Not a valid type"); } } public static […]

调用TreeSet 时的ClassCastException .contains(Long.valueOf(someLongValue))

我很难过。 我这样宣布我的一套: private Set applicationIds; 然后我像这样填充它: public void setApplicationIds( Set applicationIds ) { this.applicationIds = new TreeSet( applicationIds ); this.applications = null; } 然后我尝试使用它: public List getApplications() { if ( applications == null ) { applications = new ArrayList(); if ( applicationIds != null ) { for ( Application application : availableApplications ) { if […]

具有多个子项的树的数组中的generics类型

我正在尝试实现一个有多个孩子的树,我需要以某种方式存储这些孩子。 我决定使用LinkedList但我想先尝试使用数组。 (我不想使用任何import货。) class Node<T extends Comparable> { Node arrChildren[] = new Node[size]; } 这不起作用。 class Node<T extends Comparable> { Comparable<Node> arrChildren[] = new Comparable[size]; T element; } 这有效,但我无法将arrChildren[0]与普通的Node ,如果我制作了所有Node的Comparable节点,我无法访问其中的元素。 这是我关于Stack溢出的第一篇文章我希望得到一个好的回应,我不介意批评。 谢谢。

Javagenerics – 获取实际类型的generics参数

我已经阅读了Java中带有reflection帖的通用参数的Get类型,这让我想知道如何做到这一点。 我使用了有人发布并使用代码的解决方案 List l = new ArrayList(); Class actualTypeArguments = (Class) ((ParameterizedType) l.getClass().getGenericSuperclass()).getActualTypeArguments()[0]; 然而,这对我来说不起作用 java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class 如果我删除了类转换,实际参数的类型是E ,它是List接口的类型定义。 因此,我的问题是,我在这里做错了吗? 这种行为无论如何都是我所期望的,因为这些类型应该在编译期间被删除,对吗?

Java中的generics

我需要一个关于java中generics的教程 ,Oracle网站上的教程文档非常混乱,任何人都可以提供一些关于generics的资源吗?

Java工厂模式与generics

我希望我的BallUserInterfaceFactory返回具有正确generics类型的用户界面的实例。 我被困在下面的例子中得到错误: 绑定不匹配:BallUserInterfaceFactory类型的generics方法getBaseballUserInterface(BASEBALL)不适用于参数(BALL)。 推断类型BALL不是有界参数的有效替代 public class BallUserInterfaceFactory { public static BallUserInterface getUserInterface(BALL ball) { if(ball instanceof Baseball){ return getBaseballUserInterface(ball); } //Other ball types go here //Unable to create a UI for ball return null; } private static BaseballUserInterface getBaseballUserInterface(BASEBALL ball){ return new BaseballUserInterface(ball); } } 我知道它不能保证BALL是一个棒球,因此getBaseballUserInterface方法调用中存在参数类型不匹配。 如果我在getBaseballUserInterface方法调用中转换ball参数,那么我得到错误: 类型不匹配:无法从BaseballUserInterface转换为BallUserInterface 因为它不能保证我返回的是同一类型的BALL。 我的问题是,处理这种情况的策略是什么? (为了完整性,这里是示例中所需的其他类) public class Ball { […]

JDK 1.7打破向后兼容性? (generics)

我发现了类似的主题,但过于复杂,并不完全相同。 事情就是这样。 这是(最小)代码,它在1.6上很好,但不能用1.7 javac编译。 public class Test { private static class A{}; private static class B{}; private static class C{}; B doSomething(A arg){ return new B(); } C doSomething(A arg){ return new C(); } } 在1.7上错误是这样的: java: name clash: doSomething(Test.A) and doSomething(Test.A) have the same erasure 我理解类型擦除以及为什么它是错误的代码。 我只是不明白为什么我们可以在我们的项目中编译和运行1.6中的代码,当1.7有问题时。 怎么了? 这是1.6编译器中的一个错误,它允许我们这样做吗? 是否有可能使其在重写以外的1.7中工作? JDK1.6 javac版本:1.6.0_43 JDK1.7 javac版本:1.7.0_25

generics和inheritance问题

我有三节课: public abstract class fileHandler { } public A extends fileHandler { } public B extends fileHandler { } 现在在我的主要function中我做这样的事情: fileHandler file= null; If () { fileHandler = new A(); } else fileHandler = new B(): } 但这会产生2个编译时错误: 无法将A转换为fileHandler 无法将B转换为fileHandler 我如何摆脱这些错误,因为如果基类不是通用的,我不会得到这个错误。 更新: 我的class级层次结构是: class fileHandler { } class A extends fileHandler { } class B […]