Java相当于C#代码

时间:2017-02-27 23:59:37

标签: java c# reflection

我正在尝试将我的一些非常旧的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等价物是什么?

我知道上面的行给出了“代码味道”但在重构之前我想“按原样”重写它,所以我可以使用相同的测试方法测试最终产品。

2 个答案:

答案 0 :(得分:0)

Java相当于TypeClass。除此之外,它基本相同:

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)

编辑:@shmosel的代码测试类是否属于给定类型。我的代码测试它是否实现了给定的接口。您想要的版本取决于您的需求。检查this question以查看查看类(直接或间接)实现的所有接口的代码的实现。