Ответ 1
Короткий ответ - нет. В С# нет эквивалентной функции.
Обходной путь от С# с точки зрения разработчика Java от Dare Obasanjo:
В некоторых случаях может потребоваться создать метод, который может работать с структурами данных, содержащими любой тип, в отличие от тех, которые содержат определенный тип (например, метод для печати всех объектов в структуре данных), в то же время используя преимущества сильной типизации в дженериках. Механизм определения этого в С# - это функция, называемая типичным типом вывода, в то время как в Java это выполняется с использованием подстановочных типов. Следующие примеры кода показывают, как оба подхода приводят к одному и тому же результату.
Код С#
using System;
using System.Collections;
using System.Collections.Generic;
class Test{
//Prints the contents of any generic Stack by
//using generic type inference
public static void PrintStackContents<T>(Stack<T> s){
while(s.Count != 0){
Console.WriteLine(s.Pop());
}
}
public static void Main(String[] args){
Stack<int> s2 = new Stack<int>();
s2.Push(4);
s2.Push(5);
s2.Push(6);
PrintStackContents(s2);
Stack<string> s1 = new Stack<string>();
s1.Push("One");
s1.Push("Two");
s1.Push("Three");
PrintStackContents(s1);
}
}
Код Java
import java.util.*;
class Test{
//Prints the contents of any generic Stack by
//specifying wildcard type
public static void PrintStackContents(Stack<?> s){
while(!s.empty()){
System.out.println(s.pop());
}
}
public static void main(String[] args){
Stack <Integer> s2 = new Stack <Integer>();
s2.push(4);
s2.push(5);
s2.push(6);
PrintStackContents(s2);
Stack<String> s1 = new Stack<String>();
s1.push("One");
s1.push("Two");
s1.push("Three");
PrintStackContents(s1);
}
}