Вот мое решение
public class GenericClass<T>
{
private Class<T> realType;
public GenericClass() {
findTypeArguments(getClass());
}
private void findTypeArguments(Type t) {
if (t instanceof ParameterizedType) {
Type[] typeArgs = ((ParameterizedType) t).getActualTypeArguments();
realType = (Class<T>) typeArgs[0];
} else {
Class c = (Class) t;
findTypeArguments(c.getGenericSuperclass());
}
}
public Type getMyType()
{
// How do I return the type of T? (your question)
return realType;
}
}
Независимо от того, сколько уровней ваша иерархия классов, это решение все еще работает, например:
public class FirstLevelChild<T> extends GenericClass<T> {
}
public class SecondLevelChild extends FirstLevelChild<String> {
}
В этом случае, getMyType () = java.lang.String
Это проблема UAC на сервере 2008, некоторые Люди рекомендовали остановить UAC, я бы не рекомендовал это на производственном сервере. Ответ - , чтобы использовать gacutil.
Вам не нужно устанавливать SDK для запуска его на производственном сервере, exe и его файл конфигурации можно развернуть с компьютера разработчика (и при желании удалить после использования).
Поместите gacutil.exe и gacutil.exe.config в папку WINDOWS \ Microsoft.NET \ Framework \, соответствующую используемой версии платформы.
Затем запустите новый экземпляр командной строки, используя команду «Запуск от имени администратора».
Перейдите в папку C: \ WINDOWS \ Microsoft.NET \ Framework ...., в которой вы развернули gacutil
Затем выполните: gacutil.exe / i
Надеюсь, это решит вашу проблему (она сработала для меня).
Удачи.
Перейдите к Visual Studio или командной строке.NET и введите команду:
gacutil -if "fullpathhere.dll"
исследуют gacutil, управляют больше. - ЕСЛИ средства устанавливают сильно, также существуют другие опции.
, Если не будет никакого установленного SDK Платформы Visual Studio или.NET, то у Вас не будет командной строки.NET. В этом случае я думаю, что необходимо будет выключить контроль учётных записей от Панели управления до перетаскивать-отбрасывания блок в папку Assembly.
Я никогда не пробовал его в Windows Server 2008, но Вы попробовали от Панели управления / Средства администрирования / Платформа.NET 2.0 Конфигурации?
Запустите командную строку с помощью «Запуск от имени администратора». Выполните команду «проводник C: \ windows \ assembly». Это окно принимает удаление DLL из другого проводника, запущенного с правами «Запуск от имени администратора».
Надеюсь, это поможет
Если вы измените локальную политику безопасности на сервере Win2008 (или Win7), вы можете использовать старый метод перетаскивания: