Tag: generics

确定并描述Scala的genericstypes约束

我见过“<:”和“>:”和“<%”等,有人可以给(或定位)一个很好的描述这些? 什么是可能的限制,他们做什么,什么时候使用它们的例子?

C#确定列表中的重复

要求:在未sorting的列表中,确定是否存在重复。 我会这样做的典型方法是一个n平方的嵌套循环。 我想知道别人怎么解决这个问题。 Linq中有一个优雅的高性能方法吗? 通用的lambda或比较器会很好。

如何使用roxygen2正确loggingS4方法

我已经在SO和其他地方看到了一些关于Roxygen2未来版本应该如何实现的讨论。 但是,我卡住了。 我应该如何使用Roxygen2来logging一个S4generics以及它的方法? 一个全新的通用/方法的工作示例,以及扩展基本S4通用的例子将是非常有用的。 我不想为同一个通用的每个S4方法做单独的(大部分)冗余文档。 尽职调查:我已经find了“提取”方法的一个有用的例子。 但是,我的问题似乎已经过时和不完整。 它在类文档中使用@slot标签,不支持(不再支持)。 它只显示了核心S4方法的扩展“[”,而不是一个完整的Roxygen例子,包括S4通用的文档。 如何正确loggingS4“[”和“[< – ”使用roxygen的方法? 如果我完整地logging了一个带有标题的新的S4generics,描述@param @return @name @aliases @docType @rdname ,然后用相应的@name @aliases @docType @rdnameloggingS4方法,我得到下面的R CMD check警告: * checking for missing documentation entries … WARNING Undocumented S4 methods: << long list of apparently undocumented methods. Eg generic 'plot' and siglist 'myClass1,ANY' >> All user-level objects in a package […]

如何使用类的数组generics?

我想创build一个类的数组,每个代表一个在我正在构build的系统中可用的types。 所有涉及的类都是公共超类的子类。 所以我想这样做: Class<? extends SuperClass>[] availableTypes = { SubClass1.class, SubClass2.class }; 这给了我错误: Cannot create a generic array of Class<? extends SuperClass>. 如果我尝试在初始化的右侧限定数组的创build,我会得到相同的消息: Class<? extends SuperClass>[] availableTypes = Class<? extends SuperClass>[] { SubClass1.class, SubClass2.class }; 如果我消除了generics限定条件,我可以获得代码进行编译: Class[] availableTypes = { SubClass1.class, SubClass2.class }; 但是,我得到了generics警告: 类是一个原始types。 generics类的引用应该被参数化。 我尝试着; 我尝试着! :)另外,在这一点上,即使这不会引发警告,我也会失去一块我正在试图定义的界面。 我不想只返回一个任意类的数组; 我想返回一个特定的SuperClass的所有子类的类的数组! Eclipse有一些非常强大的工具来确定用来修正generics声明的参数,但是在这种情况下,它会下降,因为它在处理Class时往往会这样做。 它提供的“推断genericstypes参数”过程根本不会改变代码,而是留下警告。 我能够通过使用一个集合来解决这个问题: List<Class<? […]

为什么不是JComboBox通用的getSelectedItem()?

Java 7中的JCombobox已经更新为使用generics – 我一直认为这是一个疏忽,它还没有,所以我很高兴看到这种变化。 但是,当试图以这种方式使用JCombobox时,我意识到我期望使用这些genericstypes的方法仍然只是返回Object. 这是为什么呢? 这对我来说似乎是一个愚蠢的devise决定。 我意识到底层的ListModel有一个通用的getElementAt()方法,所以我将使用它,但是这是一个迂回的做法,看起来像它可以在JComboBox本身上进行更改。

genericstypes参数协方差和多个接口实现

如果我有一个协变types参数的通用接口,如下所示: interface IGeneric<out T> { string GetName(); } 如果我定义这个类层次结构: class Base {} class Derived1 : Base{} class Derived2 : Base{} 然后,我可以使用显式的接口实现在一个类上实现接口两次,如下所示: class DoubleDown: IGeneric<Derived1>, IGeneric<Derived2> { string IGeneric<Derived1>.GetName() { return "Derived1"; } string IGeneric<Derived2>.GetName() { return "Derived2"; } } 如果我使用(非generics的) DoubleDown类并将其转换为IGeneric<Derived1>或IGeneric<Derived2>它将按预期方式运行: var x = new DoubleDown(); IGeneric<Derived1> id1 = x; //cast to IGeneric<Derived1> Console.WriteLine(id1.GetName()); //Derived1 […]

GetHashCode覆盖包含generics数组的对象

我有一个包含以下两个属性的类: public int Id { get; private set; } public T[] Values { get; private set; } 我已经使IEquatable<T>并覆盖IEquatable<T>像这样: public override bool Equals(object obj) { return Equals(obj as SimpleTableRow<T>); } public bool Equals(SimpleTableRow<T> other) { // Check for null if(ReferenceEquals(other, null)) return false; // Check for same reference if(ReferenceEquals(this, other)) return true; // Check for same […]

与generics拳击和拆箱

创build整数集合(例如)的.NET 1.0方法是: ArrayList list = new ArrayList(); list.Add(i); /* boxing */ int j = (int)list[0]; /* unboxing */ 使用这个惩罚是由于拳击和拆箱造成的types安全和性能的缺乏。 .NET 2.0的方法是使用generics: List<int> list = new List<int>(); list.Add(i); int j = list[0]; 拳击的价格(据我了解)是需要在堆上创build一个对象,将堆栈分配的整数复制到新的对象,反之亦然拆箱。 generics的使用如何克服这一点? 堆栈分配的整数是否停留在堆栈上,并从堆中指向(我想这不是因为它会超出范围会发生什么情况)? 似乎仍然需要将其复制到其他地方。 究竟是怎么回事?

如何检查一个variables是否是某种IEnumerable

基本上我正在build立一个非常通用的T4模板,我需要做的事情之一是打印variable.ToString() 。 但是,我希望它评估列表和foreach通过他们,而不是打印ListItem.ToString()我的T4模板不知道什么types的variable会提前,这就是为什么这是通用的。 但是我生成的当前代码如下所示: if(variable!=null) if(variable is IEnumerable) //error here foreach(var item in variable) Write(item.ToString()); 我得到一个编译器错误标记为“使用genericstypesSystem.Generic.Collections.IEnumerable需要一个types参数” 实际上我并不关心它是什么types的,我只是想知道你是否可以通过variables进行foreach。 我应该使用什么代码?

含generics和可变参数的模糊重载java方法

我想了解Java如何处理函数调用中的歧义。 在下面的代码中,对method的调用是不明确的,但method不是。 我觉得两者都是模棱两可的,但是为什么当我注释掉method的调用时,这会编译? 为什么方法2也不明确? public class A { public static <K> List<K> method(final K arg, final Object… otherArgs) { System.out.println("I'm in one"); return new ArrayList<K>(); } public static <K> List<K> method(final Object… otherArgs) { System.out.println("I'm in two"); return new ArrayList<K>(); } public static <K, V> Map<K, V> method2(final K k0, final V v0, final Object… […]