Tag: generics

generics的解释<T extends Comparable > in collection.sort /可比代码?

我一直使用类似的界面通过collection.sort为我的class级提供自然顺序。 基本上如果我有一个人类,我会得到它来实现Comparable接口,并将提供compareTo的实现。 但是在javadocs中Collections.sort的定义中,我看到了这个签名 public static <T extends Comparable> void sort(List list) 我根本不理解这个generics定义? 不应该只是说 <T implements Comparable> 有人可以帮我弄这个吗?

是否可以在Java中使用基本类型(int)作为generics类型?

具体来说,使用SortedMap<Vector, int>我得到“在此( int )标记之后预期的维度”。 帮帮我!

Java- <T的含义扩展了Comparable >?

完整的上下文是: public class RClass<T extends Comparable> 我是否正确地说标题中的语句意味着插入到方法中的参数必须是实现Comparable OR或其派生类之一的类的对象? 谢谢。

Java Generics:通配符捕获误解

阅读Java在线教程我对通配符捕获一无所知。 例如: import java.util.List; public class WildcardError { void foo(List i) { i.set(0, i.get(0)); } } 为什么编译器不能保持赋值安全? 它知道,通过执行例如带有整数列表的方法,它从i.get得到一个Integer值。 因此,它尝试将索引0处的Integer值设置为相同的整数列表(i)。 那么,出了什么问题?为什么要写Wildcard助手?

Java 8:对的引用不明确

有没有人理解为什么以下代码可以在Java 7及更低版本中正常编译,但是在Java 8中失败了。 public static void main(String[] args) throws Exception { put(get(“hello”)); } public static R get(String d) { return (R)d; } public static void put(Object o) { System.err.println(“Object ” + o); } public static void put(CharSequence c) { System.err.println(“CharSequence ” + c); } public static void put(char[] c) { System.err.println(“char[] ” + c); } […]

通用对类

只是尝试这个问题,我在过去的考试试卷中发现,这样我就可以为即将进行的Java考试做准备。 提供用于表示事物对的通用类Pair。 该类应该提供一个构造函数,一个获取该对的第一个成员的方法,一个获取该对的第二个成员的方法,一个用于设置该对的第一个成员的方法,一个用于设置该对的第二个成员的方法。 该类应该针对第一个成员的两个类型进行参数化,并且对于该对的第二个成员进行参数化。 这是这个问题的正确实现吗? public class Pair{ private firstThing first;//first member of pair private secondThing second;//second member of pair public Pair(firstThing first, secondThing second){ this.first = first; this.second = second; } public void setFirst(firstThing first){ this.first = first; } public void setSecond(secondThing second) { this.second = second; } public thing getFirst() { return this.first; […]

如何在Jackson中为generics类型创建自定义反序列化器?

想象一下以下场景: class Foo { …. } class Bar { Foo foo; } 我想为Foo编写一个自定义Jackson解串器。 为了做到这一点(例如,为了反序列化具有Foo属性的Bar类),我需要知道在反序列化时在Bar使用的Foo的具体类型(例如,我需要知道)那个特定情况下T就是Something )。 如何编写这样的解串器? 应该可以这样做,因为jackson用类型集合和地图来做。 澄清: 似乎有2个部分来解决问题: 1)在Bar获取声明的属性类型foo并使用它来反序列化Foo 2)在反序列化时找出我们在类Bar中对属性foo进行反序列化以便成功完成步骤1) 如何完成1和2?

我可以reflection性地在java中实例化generics类型吗?

是否有可能在Java中reflection性地实例化generics类型? 使用这里描述的技术我得到一个错误,因为类标记不能是通用的。 以下面的例子为例。 我想实例化一些实现Creator的Creator子类。 实际的类名称作为命令行参数传入。 我们的想法是能够在运行时指定Creator的实现。 还有另一种方法来完成我在这里要做的事情吗? public interface Creator { T create(); } public class StringCreator implements Creator { public String create() { return new String(); } } public class FancyStringCreator implements Creator { public String create() { return new StringBuffer().toString(); } } public static void main(String[] args) throws Exception { Class someClass = […]

Javagenerics和数组初始化

以下是什么解释: public class GenericsTest { //statement 1 public ArrayList[] lists; public GenericsTest() { //statement 2 lists = new ArrayList[4]; } } 编译器接受语句1.语句2由编译器标记为“通用数组创建”。 我已经看到关于禁止generics数组的一个很好的解释就是这个 ,认为由于数组是协变的而且generics不是你可以在你允许generics数组的情况下颠覆generics类型。 撇开关于这种语言是否应该极端地在generics的处理中创造这种复杂的不一致性的争论,无论你怎么努力都让你不能自己开枪(如果有人知道关于亲戚的任何好的讨论)问题的优点/缺点请发布,我有兴趣看看论点),如果(2)不是,为什么应该允许声明(1)?

Java:通用方法和数字

我想制作一个通用方法,它可以得到一个数字List的总和。 我的尝试是这样的: public static T sumList(List data) { T total = 0; for (T elem : data) { total += elem; } return total; } 但问题是there is no += operator in T并且total can’t be assigned to zero 。 我怎样才能做到这一点? 谢谢