Tag: generics

Java通用类 – 确定types

如果我创build一个Java类是通用的,如: public class Foo<T> 一个人怎么能在内部决定这个阶级呢,结果是什么? public ???? Bar() { //if its type 1 // do this //if its type 2 // do this //if its type 3 // do this //if its type 4 // do this } 我围绕着Java API进行了探索,并使用了reflection的东西,instanceof,getClass,.class等,但似乎无法使它们成为正面或反面。 我觉得我很亲密,只需要结合一些电话,但总是不足。 更具体地说,我试图确定这个类是否被实例化为3种可能的types之一。

为什么在generics中使用Collections.emptySet()而不是作为方法参数?

所以,我有一个像这样的构造函数的类: public FilterList(Set<Integer> labels) { … } 我想用一个空集合构造一个新的FilterList对象。 遵循Joshua Bloch在他的书“有效的Java”中的build议,我不想为空集创build一个新的对象; 我只是使用Collections.emptySet()来代替: FilterList emptyList = new FilterList(Collections.emptySet()); 这给了我一个错误,抱怨java.util.Set<java.lang.Object>不是一个java.util.Set<java.lang.Integer> 。 好的,这个怎么样: FilterList emptyList = new FilterList((Set<Integer>)Collections.emptySet()); 这也给我一个错误! 好的,这个怎么样: Set<Integer> empty = Collections.emptySet(); FilterList emptyList = new FilterList(empty); 嘿,它的工作! 但为什么? 毕竟,Java没有types推断,这就是为什么如果您执行Set<Integer> foo = new TreeSet()而不是Set<Integer> foo = new TreeSet<Integer>() ,您将获得未经检查的转换警告。 但是Set<Integer> empty = Collections.emptySet(); 甚至没有警告的作品。 这是为什么?

为什么Java的Class <T>是通用的?

为什么Java的Class<T>通用的?

在C#中将Int转换为通用枚举

类似于铸造诠释枚举在C#中,但我的枚举是一个genericstypes参数。 处理这个问题的最好方法是什么? 例: private T ConvertEnum<T>(int i) where T : struct, IConvertible { return (T)i; } 生成编译器错误Cannot convert type 'int' to 'T' 完整代码如下,其中value可以包含int或null。 private int? TryParseInt(string value) { var i = 0; if (!int.TryParse(value, out i)) { return null; } return i; } private T? TryParseEnum<T>(string value) where T : struct, IConvertible { var i […]

不能明确地专门化一个generics函数

我有以下代码的问题: func generic1<T>(name : String){ } func generic2<T>(name : String){ generic1<T>(name) } 通用1(名称)结果编译器错误“不能明确地专门化通用函数” 有什么办法可以避免这个错误? 我不能改变generic1函数的签名,所以它应该是(String) – > Void

Generic List <T>作为方法的参数

我如何使用一个List<T>作为一个方法的参数,我试试这个语法: void Export(List<T> data, params string[] parameters){ } 我有编译错误: types或名称空间名称“T”找不到(您是否缺lessusing指令或程序集引用?)

scala – 任何与generics中的下划线

Scala中的以下generics定义之间有什么不同: class Foo[T <: List[_]] 和 class Bar[T <: List[Any]] 我的直觉告诉我他们是一样的,但后者更明确。 我发现前者编译但后者不编译的情况,但不能把我的手指放在确切的区别。 谢谢! 编辑: 我可以再投入混合? class Baz[T <: List[_ <: Any]]

最简洁的方式将ListBox.items转换为通用列表

我正在使用C#并针对.NET Framework 3.5。 我正在寻找一个简单而有效的小代码,将ListBox中的所有项复制到List<String> (通用列表 )中。 目前我有类似于下面的代码: List<String> myOtherList = new List<String>(); // Populate our colCriteria with the selected columns. foreach (String strCol in lbMyListBox.Items) { myOtherList.Add(strCol); } 当然,这是有效的,但是我不禁感到,用一些较新的语言function必须有更好的方法来做到这一点。 我在想像List.ConvertAll方法的东西,但这只适用于generics列表而不是ListBox.ObjectCollection集合。

javagenericsobj instanceof T

有没有办法确定一个对象是一个genericstypes的实例? if(obj instanceof T){…} 这显然不起作用。 有其他select吗? 就像我想用javareflection来实例化一个类,然后检查以确保它是types的通用T.

使用Javagenerics迭代枚举值

我试图find一种方法来遍历枚举的值,而使用generics。 不知道如何做到这一点,如果可能的话。 下面的代码演示了我想要做什么。 请注意代码T.values()在下面的代码中无效。 public class Filter<T> { private List<T> availableOptions = new ArrayList<T>(); private T selectedOption; public Filter(T selectedOption) { this.selectedOption = selectedOption; for (T option : T.values()) { // INVALID CODE availableOptions.add(option); } } } 下面是我将如何实例化一个Filter对象: Filter<TimePeriod> filter = new Filter<TimePeriod>(TimePeriod.ALL); 枚举定义如下: public enum TimePeriod { ALL("All"), FUTURE("Future"), NEXT7DAYS("Next 7 Days"), NEXT14DAYS("Next 14 […]