[英]Java to C# / Static Methods with non-typed Generic class parameters
我正在通過Sharpen
將一堆Java
轉換為C#
,並且大多數轉換都很好,只需要進行一些細微的調整,但是通用轉換相當弱,需要大量清理。
但是在幾個方面,我很困惑在Java中如何注入/編譯下流(下流?),因為類型參數不能用於靜態方法的聲明中。
給定一個Java Graph
泛型類及其子類DependencyGraph<T>
:
public class Graph<V, E>
{
~~~
}
public final class DependencyGraph<T> extends Graph<String, Object>
{
~~~
}
以下Java靜態Alorgithms.topo
使用不同的Graph
和Visitors
泛型數組(以及這兩個基類的子類) Alorgithms.topo
獲取調用:
public final class Algorithms
{
public static void topoSort(Graph g, Visitor visitor)
{
Vertex[] vertices = new Vertex[noOfDegreesOfFreedom];
~~~
}
}
當靜態方法的參數使用泛型類(即Graph g
,傳遞給靜態方法的類型是否由Java VM在運行時處理?
還是在編譯時為調用Alorgithms.topo
每個方法推斷出通用類型實現,並將其折疊為一個大類?
歸根結底,我嘗試了找出將它們轉換為C#的最輕松的方法。
首先,Java中的靜態方法也支持泛型。 可以在任何類中聲明以下方法:
public static <E> E[] appendToArray(E[] array, E item)
關於最后一個問題,泛型僅在編譯時使用,以防止運行時潛在的強制轉換異常。 這就是類型擦除機制 。
如果您沒有為泛型指定任何類型(例如Graph
),那么Java只會假定它是Graph<Object>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.