2017-02-27 142 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以查看類(直接或間接)實現的所有接口的代碼的實現。