我正在尝试将我的一些非常旧的C#(。Net 2.0)代码重写为Java。程序很简单,但我偶然发现了这部分,我不知道如何转移到java:
public ISomething listContainsType(Type typeToCheck) {
foreach(ISomething obj in _List)
if (obj.GetType() == typeToCheck)
return obj;
return null;
}
因此,上面的代码通过列表只知道每个元素实现“ISomething”并检查哪个类实际实现了所述接口。至少,它是如何与.Net 2.0一起使用的。
上面代码的Java等价物是什么?
我知道上面的行给出了“代码味道”但在重构之前我想“按原样”重写它,所以我可以使用相同的测试方法测试最终产品。
答案 0 :(得分:0)
Java相当于Type
是Class
。除此之外,它基本相同:
public ISomething listContainsType(Class<?> typeToCheck) {
for (ISomething obj : _List)
if (obj.getClass() == typeToCheck)
return obj;
return null;
}
你会这样称呼:
ISomething s = listContainsType(SomeType.class);
答案 1 :(得分:0)
为了锻炼,我尝试了以下方面的实施:
static public ISomething listContainsType(Class<?> typeToCheck) {
for (ISomething obj : _List)
if (Arrays.stream(obj.getClass().getInterfaces()).anyMatch(typeToCheck::equals))
return obj;
return null;
}
这样称呼:listContainsType (Serializable.class)
。