2017-02-27 88 views
-2

我正在尝试将一些非常古老的C#(.Net 2.0)代码重写到Java中。程序很简单,但我偶然发现了这个部分,我不知道如何转移到Java:Java相当于C#代码

public ISomething listContainsType(Type typeToCheck) { 
     foreach(ISomething obj in _List) 
      if (obj.GetType() == typeToCheck) 
       return obj; 

     return null; 
    } 

所以,上面的代码通过不胜枚举只知道每个元素实现“ISomething”,并真正实现说检查哪一类接口。至少,它如何与.Net 2.0合作。

以上代码的Java等价物是什么?

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

+2

StackOverflow不是代码翻译服务。你有什么尝试? –

回答

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); 
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以查看类(直接或间接)实现的所有接口的代码的实现。