Tag: generics

generics实际上意味着什么?

可能重复: List 在javagenerics中的含义是什么? Javagenerics的类型参数中的问号是什么意思? 道歉,但很难尝试搜索 。 Javagenerics有什么意义? 我理解和 ,但我以前从未见过这个问号。

字符串被分配给List而没有编译错误

据我所知,Java中generics的主要目的之一是提供编译时类型安全性。 如果它被编译,代码将运行没有问题。 那么为什么要编译以下代码? public static void main(String[] args) { String s = getList(); } private static T getList() { return (T)new ArrayList(); } 它汇编很好。 我的类型安全编译在哪里? getList()方法与String类没有任何共同之处。

类型Map 不适用

由于接口,我实现了以下JAVA方法: public String importDocument(ImportSource source, Map paramMap); 当我尝试做以下时,我收到编译警告。 片段: paramMap.put(“Key”, “Value”); 错误: 方法put(字符串,捕获#1-of?extends Object)在Map类型中不适用于参数(String,String) 为什么?

Collection类型不是通用的; 它不能用参数

我对Eclipse Galileo有一个奇怪的问题。 我将Java 1.6设置为我的JRE。 在这行代码上 List templates = new ArrayList (); 我在Eclipse的问题列表中看到以下错误: Collection类型不是通用的; 它不能用参数参数化 使用Ant构建此项目没有任何问题。 我该如何解决? 看起来这是一个Eclipse问题,但由于这个错误,我无法从IDE编译/发布我的项目。

ClassCast错误:Java 7与Java 8

这是一个错误或function吗? 以下代码在Java 7中运行良好,但在Java 8中引发exception: 最后一个命令在Java8中抛出ClassCastexception,上面的所有“等效”命令的工作方式相同。 我认为问题在于,在Java 8中,编译器决定在最后一行使用String.value(char[])而不是Java 7中的String.value(Object) 。我认为这应该表现相同向后兼容的方式。 我错过了什么吗? 注意:正如Marko所说,这可能与Java 8中引入的目标类型推断有关。 public class Test { public static void main(String[] args) { System.out.println( getVal().getClass()); // String System.out.println( String.valueOf(Test.getVal()) ); // “abc” Object obj = getVal(); System.out.println( String.valueOf(obj) ); // “abc” System.out.println( String.valueOf(getVal()) ); // 7: “abc”, 8: Exception } // returns a string for simplicity; […]

Javagenerics – ArrayList初始化

众所周知,arraylist init。 应该是这样的 ArrayList a = new ArrayList(); ArrayList a = new ArrayList(); // compile-time error 所以,为什么java允许这些? 1. ArrayList a1 = new ArrayList(); 2. ArrayList a2 = new ArrayList(); 那么,如果他们是正确的,为什么不允许这些呢? 1. a1.add(3); 2. a2.add(3); 编译器消息是:类型ArrayList中的方法add(int,capture#1-of?extends Object)不适用于参数(int) 更一般 1. a1.add(null e); 2. a2.add(? e); 我读到了这个,但很高兴收到你的来信。 谢谢 另一个有趣的观点是: ArrayList<ArrayList> a = new ArrayList<ArrayList>(); // correct ArrayList a […]

Java中未绑定的通配符generics的用途和要点是什么?

我不明白未绑定的通配符generics的用途是什么。 带有上边界的绑定通配符generics 非常有意义,因为使用多态,我可以使用该类型或集合。 但是具有任何类型的generics有什么意义呢? 它不会破坏仿制药的目的吗? 编译器没有发现任何冲突,在类型擦除后,就像没有使用generics一样。

Java List T toArray(T a)实现

我只是看List接口中定义的方法: T[] toArray(T[] a) ,我有一个问题。 为什么它是通用的? 因此,方法不是完全类型安全的。 以下代码片段编译但导致ArrayStoreException : List list = new ArrayList(); list.add(1); list.add(2); String[] stringArray = list.toArray(new String[]{}); 在我看来,如果toArray不是通用的并采用List类型参数,那就更好了。 我已经写过玩具示例了,它可以通用: package test; import java.util.Arrays; public class TestGenerics { private Object[] elementData = new Object[10]; private int size = 0; public void add(E e) { elementData[size++] = e; } @SuppressWarnings(“unchecked”) //I took this […]

Javagenerics和varargs

我想用generics和varargs实现一个函数。 public class Question { public static void doNastyThingsToClasses(Class parent, Class… classes) { /*** something here ***/ } public static class NotQuestion { } public static class SomeQuestion extends Question { } public static void main(String[] args) { doNastyThingsToClasses(Object.class, Question.class, SomeQuestion.class); // OK doNastyThingsToClasses(Question.class, SomeQuestion.class); // OK doNastyThingsToClasses(Question.class, Object.class, SomeQuestion.class); // compilation failure } } […]

我什么时候应该使用generics来定义类型之间的关系?

在这里使用generics时会产生一些混乱。 我看过Java Generics? 但还是有几个问题。 说我有: public class Honda implements ICar(){ } public class Opel implements ICar(){ } 我应该使用: public class Person{ ICar car; . . public Person (ICar c){ car = c; } } 要么 public class Person{ T car; . . public Person(T c){ car = c; } } 还是取决于执行的任务? generics仅用于聚合关系(容器等); 他们只是用于collections吗?