Tag: generics

一个奇怪的generics边缘情况与Mockito.when()和generics类型推断

我正在编写一个使用Mockito的java.beans.PropertyDescriptor测试用例,我想模仿getPropertyType()的行为来返回一个任意的Class对象(在我的例子中, String.class )。 通常,我会通过调用: // we already did an “import static org.mockito.Mockito.*” when(mockDescriptor.getPropertyType()).thenReturn(String.class); 然而,奇怪的是,这不编译: cannot find symbol method thenReturn(java.lang.Class) 但是当我指定类型参数而不是依赖于推理时: Mockito.<Class>when(mockDescriptor.getPropertyType()).thenReturn(String.class); 一切都很笨拙。 为什么编译器在这种情况下无法正确推断when()的返回类型? 我之前从未必须指定参数。

Java 8:通用类型推断改进

使用JEP 101:广义目标类型推断 ,这个 final List bools = Arrays.asList(true,false, true); final List string = bools.stream() .map(x -> x ? ‘X’ : ‘O’) .collect(Collectors.toList()); 应该可以减少到 final List bools = Arrays.asList(true, false, true); final List string = bools.stream() .map(x -> x ? ‘X’ : ‘O’) .collect(Collectors.toList()); 在Java 8中,但后者不编译: Type mismatch: cannot convert from List to List 我弄错了吗? 还是我领先于我的工具? […]

返回一个列表,我已经有了一个rowmapper实现

在我的UserDao中,我想返回一个用户列表。 我已经有一个implements RowMapper的UserRowMapper 。 我怎样才能做到这一点? 我试过了: List rows = getJdbcTemplate().queryforList(“select * from users”); for(Map row : rows) { } 但不知道如何使用我的UserRowMapper来填充User对象并将其插入到我的用户List列表中。 BTW,这是我最好使用的通用列表: List users = new ArrayList(); ?

JComboBox是一种原始类型。 应参数化对generics类型JComboBox 的引用

String[] boxOptions = {“1″,”2″,”4″,”8″,”16″,”20″,”40″,”100″,”400”}; JComboBox box = new JComboBox(boxOptions); 我以前在程序中有这些确切的代码行,并没有收到此错误。 我做了一些搜索,我发现的结果有点过头了。 有任何想法吗? 错误是: JComboBox is a raw type. References to generic type JComboBox should be parameterized

为什么instanceof不能使用Generic?

可能重复: Java:Instanceof和Generics 我正在尝试编写一个将通用List转换为特定类型List的函数。 找到下面的代码 public List castCollection(List srcList, Class clas){ List list =new ArrayList(); for (Object obj : srcList) { if(obj instanceof T){ … } } return list; } 但是obj instanceof T显示编译错误 – 无法对类型参数T执行instanceof检查。请改为使用其擦除对象>,因为将在运行时擦除其他generics类型信息。 任何澄清或获得预期结果的方法? 提前致谢。 🙂

Java int 数组到HashSet

我有一个int数组: int[] a = {1, 2, 3}; 我需要一个类型集: Set s; 如果我执行以下操作: s = new HashSet(Arrays.asList(a)); 当然,它认为我的意思是: List 而我的意思是: List 这是因为int是原始的。 如果我使用了String,那么一切都会起作用: Set s = new HashSet( Arrays.asList(new String[] { “1”, “2”, “3” })); 如何轻松,正确,简洁地从: A) int[] a… 至 B) Integer[] a … 谢谢!

为什么通用列表声明的区别?

我想要两个列表:第一个是整数列表。 我认为它是: List ints= Arrays.asList(1,2,3); 它工作正常。 第二个是对象列表。 我声明为: List objs= Arrays.asList(1,2.13,”three”); 但是一旦我写它就会在eclipse中出错。 错误是: Multiple markers at this line – Type mismatch: cannot convert from List<Object&Comparable&Serializable> to List – Type safety: A generic array of Object&Comparable&Serializable is created for a varargs parameter 相反,如果我写 List objs = Arrays.asList(1,2.13,”three”); 它工作正常。 我无法弄清楚原因。

Java“unchecked调用compareTo(T)作为原始类型java.lang.Comparable的成员”

我正在尝试将排序列表实现为Java中的简单练习。 为了使它具有通用性,我有一个add(Comparable obj)所以我可以在任何实现Comparable接口的类中使用它。 但是,当我在代码中的任何地方使用obj.compareTo(…)时,我从编译器中获取”unchecked call to compareTo(T) as a member of the raw type java.lang.Comparable” (使用-Xlint:unchecked选项) )。 代码工作正常,但我无法弄清楚如何摆脱这个烦人的消息。 任何提示?

无法在类中实例化通用数据类型

我有一个不可变的类,具有以下布局, public final class A { private ArrayList myList; private A(){ myList = new ArrayList(); } public A addData(T t){ A newOb = // make a new list and instantiate using overloaded constructor T newT = new T(); ***********ERROR HERE************* newOb.myList.add(newT); return newOb; } ……… } 我在这里得到的错误是cannot instantiate type T 现在,我认为这与Java中的type erasure有关。 我怎么能克服这个? 我想添加一个新的参数副本,该副本将传递给我的列表中的addData。

制作通用比较器类

我正在尝试制作一个比较器,可以将任何类型的元素进行比较。 我不确定如何创建课程。 我只是想让它比较同一类型的两个元素(但客户端提供它的任何类型,例如:Integer,String,Double等等),以查看哪一个大于另一个。 public class InsertionComparator implements Comparator { /** * Compares two elements. * * @param f1 The first element you want to compare. * @param f2 The second element you want to compare. * @return -1,0,1 Whether or not one is greater than, less than, * or equal to one another. */ public […]