Tag: generics

如何以通用方式处理数字?

我的问题非常类似于“编写一个通用类来处理内置类型”,包括受到在类处理矩阵操作的事实的启发。 虽然这个问题是用C#提出的,但指的是关于Generic Operators的文章。 我不明白。 Java Number没有add方法,因此您可以使用以下方法: public Number myAdd(Number a, Number b){ return a.add(b); } 那么你如何处理一个你希望能够在Java中处理多种类型的数字的情况?

Javagenerics:不匹配

我有两个同构类型的层次结构。 第一个的基本类型是BaseA,第二个的基本类型是BaseB。 我知道如何将BaseB的任何子类的任何对象转换为其对应的BaseA子类型。 我想实现一个方法,它接受BaseB类型的对象确定其类并构造相应的BaseA子类型的对象。 示例代码: public interface BaseA… public interface BaseB… public class DerA implements BaseA… public class DerB implements BaseB… … public interface Transform { A toA (B b); } public class DerAtoDerB implements Transform { DerA toA (DerB b){…} } public class Transformations { private static Map<Class, Transform> _map = new HashMap(); static […]

如何解释像 T, Query ,Class 这样的Javagenerics?

有Java API: Morphia Morphia类定义如下方法: T fromDBObject(Class entityClass, com.mongodb.DBObject dbObject) 有人可以解释 T and Class含义吗? 该方法是否在集合中返回类型为T的类? Inteface DataStore上的另一个API: Query find(Class clazz, String property, V value) What Query means? Is the method returning an object of type Query that is then surrounded by collection “ and “. This part is very confusing. 如果涉及尖括号( ) ,它是否正确,它总是意味着涉及Java集合? 抱歉,我忘了在这个问题中标记一些内容作为代码,否则SO正在逃避改变问题的整个含义,因此@Vash和@fiver的2个答案都符合此编辑前的问题。 感谢您指出一些教程,但请提供您在Javagenerics方面的专业知识的特定答案,以帮助我更好地理解教程。

Java Generics:在arraylist(无界通配符类型)上,add和addAll方法的行为有所不同

直接在这里举个例子: ArrayList x = new ArrayList(); ArrayList y = new ArrayList(); x.add(“abc”); // Clause 1. Compilation error – No problemo. Understood. x.addAll(y); // Clause 2. No compilation error 对于无界通配符,无法添加。 为什么最后一个语句没有编译错误?

具有有界扩展枚举参数的通用方法 – 无法访问values()方法

我想写一个generics方法,它采用扩展Enum的有界参数。 例如,如果我有一个枚举如下: public enum InputFlags{ ONE (0000001), TWO (0000002), THREE (00000004); public final int value; InputFlags(int value){ this.value = value; } } 然后我可以做以下事情: for (InputFlags ifg : InputFlags.values()){ // Do something with ifg } 但是,如果我尝试在返回参数有界的generics方法中执行上述操作,则无法访问values()方法: public static T getFlags(int f){ T.values(); // NOT allowed, even though I have bounded by extending Enum. } 好像我无法访问generics方法中的values() 。 […]

类型参数的数据类型如何在协方差和逆变量中确定?

我正在阅读书籍Java Generics and Collections作者:Maurice Naftalin,Philip Wadler,在前两章中,我的头脑中充满了怀疑。 我无法弄清楚答案。 在通话中: public static void copy(List dst, List src) { for (int i = 0; i < src.size(); i++) { dst.set(i, src.get(i)); } } List objs = Arrays.asList(2, 3.14, “four”); List ints = Arrays.asList(5, 6); Collections.copy(objs, ints); assert objs.toString().equals(“[5, 6, four]”); 在调用函数’copy’期间: 第一个参数:?=对象 第二个参数:?=整数 但是T的数据类型是什么? 基于擦除实现的jvm是如何决定的? 书中说:在Collections.copy(obj,ints)行中 ,类型参数T被认为是Number。 允许调用,因为objs的类型为List […]

如何声明具有多个具有非平凡关系的generics类型的成员?

以下是我想在我的java代码中编写的内容: private <A extends Action, R extends Result> MyType member; 然而,这是无效的语法。 所以我最终写作: private MyType<? extends Action, ? extends Result> member; 但这忽略了从Result派生的两个类都相同的事实。 我的类方法都强制执行这种关系,所以我可以确定MyType强制执行它,但在某些情况下我仍然需要不安全的类型转换member 。 更多细节 这是我想要做的精确版本,虽然它更加危险: 我希望我能做到: private <A extends Action, R extends Result> Map< Class, ActionHandler > handlers; 相反,我必须这样做: private Map< Class< ? extends Action >, ActionHandler<? extends Action, ? extends Result> > handlers; 我的方法强制执行所需的关系,看起来像这样: […]

类定义类名

这个class级定义有什么意义,那是什么类? class Node<K extends Comparable,V>

来自Cay Horstmann的Javagenerics,Core Java 7,第I卷,第716页

我正在学习Java 7generics,阅读Cay Horstmann,Core Java7,第I卷,第716页。我不明白为什么会出现运行时错误(非法播放),请参阅下面的代码。 任何人都能比Cay更好地向我解释吗? public class ProcessArgs { public static T[] minmax(T… a) { Object[] mm = new Object[2]; mm[0] = a[0]; mm[1] = a[1]; if (mm[0] instanceof Comparable) { System.out.println(“Comparable”); // this is True, prints Comparable at run-time } return (T[]) mm; // run-time error here /* Run-Time ERROR as below: ComparableException in […]

在generics类中创建generics方法名称?

目前,我有这样的事情: – public class MyHolder { private T value; public MyHolder(T t) { this.value = t; } public T getValue() { return first; } public void setValue(T t) { this.first = t; } } 有了这个,我可以像这样使用它: – MyBean bean = new MyBean(); MyHolder obj = new MyHolder(bean); obj.getValue(); // returns bean 而不是将getter / setter调用为getValue()和setValue(..) ,是否也可以“生成”? 从本质上讲,将getMyBean()和setMyBean(..)放在一起会很好,具体取决于传入的类型。虽然这是一个非常简单的例子,但是如果我创建一个带有N个generics属性的generics持有者类,那么它将它称为有意义的东西而不是getValue1()或getValue2()等等会很高兴。 […]