簡體   English   中英

具有非類型化通用類參數的Java到C#/靜態方法

[英]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使用不同的GraphVisitors泛型數組(以及這兩個基類的子類) 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM