Tag: generics

如何在这里推断generics类型?

public static void main(String[] args) { Map<String, Map<Long, List>> map = getHashMap(); } static Map getHashMap() { return new HashMap(); } 我在google guava(作为工厂方法)中看到了类似的代码,用于制作Hashmap的实例而不提及generics类型。我不明白generics是如何通过上述程序推断的。我的意思是函数getHashMap如何理解类型因为我没有将任何类型的信息传递给函数。

如何在java中获得比较器的反转

在一个方法中,我收到一个通用object E extends Comparable作为参数。 现在我想创建两个优先级队列。其中一个使用E使用的comparator和其他使用E使用的comparator相反的队列(即如果E使用’ =’)。 请告诉我如何创建两个这样的队列。 queue2=new PriorityQueue(0,Collections.reverseOrder(e)); 我收到reverseOrder不适用的错误。 请帮忙

使用Comparable和Comparator比较generics类型

我遇到了头疼我调试有困难。 我试图比较两个通用值,以便我可以根据值将它们插入到数组中。 这是我第一次使用Comparable和Comparator接口,因此围绕这些问题的任何其他建议都会很棒。 这就是我的课程设置方式: public class SVStore<K, V extends Comparable> implements Pairs, Iterable, Comparable, Comparator { put()方法: @Override public V put(K key, V value) { SVData tab[] = table; for (int i = 0; i < table.length – 1; i++) { if (value.compareTo(tab[i].dataValue) <= 0) { int index = i; for( int j = index; […]

语法<T在Java中扩展了Class >

关于以下内容,我有几点想法: public interface MaxStack<T extends Comparable > 1 – 为什么实现MaxStack的类应该像这样编写: public class MaxStackclass<T extends Comparable > implements MaxStack 而不是public class MaxStackclass<T extends Comparable > implements MaxStack<T extends Comparable > ? 2-为什么这个类的私有变量,当我使用generics时,应该只用编写而不用<T extnds Comparable> ? 例如, private List stack= new ArrayList(); 3 – <T extends Comparable>和之间有什么区别 – 如果我需要比较我class级中的bewteen元素,两者都可以,不是吗? 编辑:我认为3的问题是,它可能允许插入以第二种方式定义的列表,以便具有不同的元素,这些元素都可以从可比较的方面扩展,然后当我想比较它们时,它将不可能,因为我们无法将String与Integer进行比较,所以都从Comparable扩展。

是否可以在Java或C#中实例化generics类型的对象?

例如,在Java中,如果我有参数化类,是否可以执行以下操作? public class MyClass{ public void aMethod { .. T object = new T(); .. } .. } 在Java中,我认为这是不可能的,因为编译器不知道要调用什么构造函数。 但在C#? 我不懂语言而且我读过很多黑暗的东西都可以做,所以我只是想知道..

算术与通用数字

所以我必须接受一个generics类型T,它将是一个数字原语的包装类,并对它进行一些算术运算。 我认为这将是微不足道的,因为自动装箱和拆箱: T newval = val1*val2; (其中val1和val2已经是T类型的变量,其中包含适当的值。) 但事实certificate,如果Java在编译时没有明确地知道类型,那么它将不会取消装箱值。 我还以为我可以使用multiply方法,每个Number子类(我打算使用)都在其中。 所以我宣布我的课程: public class SomeClass { // … } 接着: T newval = val1.multiiply(val2); 但这不起作用,因为我猜不是所有子类的Number都是必需的(为什么他们不使用这个接口?)来拥有那个方法(但是我想要使用的所有那些DO。) 我已经看到了一些类似的问题,但它们都导致OP被告知不使用generics,但我需要使用generics来完成我正在做的工作,否则整个事情就毫无价值。 任何人都能想到一个对我有用的解决方案吗? 编辑:好的,所以他回到我身边并澄清了它的含义,它的不同之处在于我的问题与我正在做的事情不再相关。 多谢你们。

装饰图案与多个generics

我目前正在做一些代码重构。 所以我想通过decorator设计替换现有的inheritance设计。 但我正在努力解决多种仿制药(可能根本不可能)。 我现在有上面的设计。 有一个IConstraint可以根据实现的约束来check sa类。 这些约束的具体实现是SimpleConstraintA和SimpleConstraintB ,它们都检查来自ClassA一些值。 Decorator增强了约束,例如,当指定值不在范围内时,有一些约束不应该被检查。 ClassA实现接口IA和IB以便DecoratorA和DecoratorB可以使用它。 设计的用法如下: Test classToCheck = new Test(“test”); IConstraint constraint = new DecoratorA(new DecoratorB(new SimpleConstraint())); boolean value = constraint.check(classToCheck); 所以我想要的是使用具有不同数量的输入参数和不同类型的代码。 喜欢: Test classToCheckA = new Test(“testA”); Test classToCheckB = new Test(“testB”); IConstraint constraint = new DecoratorA(new DecoratorB(new SimpleConstraint())); boolean value = constraint.check(classToCheckA, classToCheckB); 要么: Test classToCheckA = […]

队列使用Java中的链表实现

我很快用Java编写了一个链表类。 我想编写另一个使用链表的队列类。 我如何用Java实现这一目标? 我不完全理解implements / extends关键字……这就是我的队列的样子(例如): public class Queue implements LinkedList { protected LinkedList list; public Queue() { list = new LinkedList(); } public void add( T element) { list.add( element); } public T removeLast() { return list.removeLast(); } } 另请注意,链表类也是通用的。 我知道已经内置了类来实现这个function,但是我想学习(这就是为什么我要手动执行此操作) 编辑:此外,最后,我希望能够说出这样的话: Queue aQueue = new LinkedList();

访客模式可以用于执行通用双重调度吗?

如果您搜索访问者模式的通用版本,您会发现以下内容: public abstract class Element { public void accept(Visitor v) { v.visit(this); } } public interface Visitor { void visit(T element); } (改编自Generics和访客模式 )。 但是,这似乎禁止双重调度,因为“第二次”调度 – 依赖于方法重载的调度 – 使用generics方法参数是不可能的。 那么,使用带有访问者模式的generics是否禁止双重调度?

如何获取具有多个generics类型的类型以匹配类型参数?

例如,假设我想要一个Map<Class, List> ,那么我可以放入一个类并获取该类型的列表 – 是否有什么东西可以替换问号以使其发生?