Tag: generics

一个types参数的C#方差注解,约束为值types

在C#中可以将types注释添加到types参数中,限制为值types: interface IFoo<in T> where T : struct { void Boo(T x); } 为什么编译器允许这样做,如果方差标注在这种情况下完全没有意义?

不明白Arrays.copyOf的源代码

我无法理解Arrays.copyOf的源代码。 public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) { T[] copy = ((Object)newType == (Object)Object[].class) ? (T[]) new Object[newLength] : (T[]) Array.newInstance(newType.getComponentType(), newLength); System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength)); return copy; } 这一行是什么检查? (Object)newType == (Object)Object[].class (T[]) new Object[newLength]和(T[]) Array.newInstance(newType.getComponentType(), newLength)之间有什么区别。 为什么Array.newInstance对两种情况都不够好? 下面这行代码编译,但在运行时崩溃(如预期的那样)。 我应该什么时候使用这种方法? Integer[] nums = Arrays.copyOf(new String[]{"a", "b"}, […]

在Swift中扩展构造的genericstypes

是否有可能扩展一个generics类的专门/构造genericstypes? 我想用一个方法来扩展IntArrays来计算它的元素的总和。 例如 extension Array<Int> { func sum() -> Int { return reduce(0) { $0 + $1 } } }

Scala通用方法 – 没有ClassTag可用于T

我相对较新的斯卡拉,并试图定义一个通用的对象方法。 但是,当我引用方法中的参数化types时,我得到“没有ClassTag可用于T”。 这是一个可以说明问题的人为的例子。 scala> def foo[T](count: Int, value: T): Array[T] = Array.fill[T](count)(value) <console>:7: error: No ClassTag available for T def foo[T](count: Int, value: T): Array[T] = Array.fill[T](count)(value) ^ 在此先感谢您帮助理解这里出了什么问题,以及如何使这个人为的例子工作。

为什么这个通用代码在java 8中编译?

我偶然发现了一段代码,让我想知道为什么编译成功: public class Main { public static void main(String[] args) { String s = newList(); // why does this line compile? System.out.println(s); } private static <T extends List<Integer>> T newList() { return (T) new ArrayList<Integer>(); } } 有趣的是,如果我用<T extends ArrayList<Integer>>修改newList方法的签名,它就不再工作了。 注释和响应之后更新:如果将genericstypes从方法移动到类中,代码将不再编译: public class SomeClass<T extends List<Integer>> { public void main(String[] args) { String s = […]

在Java语法中,Class <? 扩展的东西>

Class<? extends Something> 这是我的解释,这是类模板,但类? 意味着类的名字是不确定的,它扩展了Something类。 如果我的解释有什么问题,请告诉我。

N注入通用接口

我定义了一个接口和一个类: public interface IRepository<T> { } public class RoleRepository:IRepository<Domain_RoleInfo> { } 在这里注入: public RoleService { [Inject] public RoleService(IRepository<Domain_RoleInfo> rep) { _roleRep=rep; } } 如何执行Ninject的dependency injection,说如何绑定? 我已经写了一个助手类,如下所示,它与非通用接口工作正常。但如何重构它支持通用接口如上? public class RegisterNinjectModule : NinjectModule { public override void Load() { BindServices(); BindRepositories(); } private void BindServices() { FindAndBindInterfaces("RealMVC.Service.Interfaces", "RealMVC.Services"); } private void BindRepositories() { FindAndBindInterfaces("RealMVC.Repository.Interfaces", "RealMVC.Repositories"); } private […]

如何让Java方法返回任何types的generics列表?

我想写一个方法,将返回任何types的java.util.List , 而不需要任何types的注释 : List<User> users = magicalListGetter(User.class); List<Vehicle> vehicles = magicalListGetter(Vehicle.class); List<String> strings = magicalListGetter(String.class); 方法签名是什么样的? 像这样的东西,也许(?): public List<<?> ?> magicalListGetter(Class<?> clazz) { List<?> list = doMagicalVooDooHere(); return list; } 提前致谢!

typeof和is关键字有什么区别?

这两者之间的确切区别是什么? // When calling this method with GetByType<MyClass>() public bool GetByType<T>() { // this returns true: return typeof(T).Equals(typeof(MyClass)); // this returns false: return typeof(T) is MyClass; }

无法从List <Bar>转换为List <Foo>

我有这样一个设置: abstract class Foo {} class Bar : Foo {} 和这种forms的其他方法: void AddEntries(List<Foo>) {} 我正在尝试使用Bartypes的对象列表调用此方法 List<Bar> barList = new List<Bar>() AddEntries(barList); 但是这给了我错误: 无法从List <Bar>转换为List <Foo> 反正有这个问题吗? 我需要保持使用抽象类的方法定义。