小编Cod*_*ler的帖子

有没有办法在Java中找到模板(通用)参数的类型?

我想在Java中做这样的事情:

public static <T> T foo() {
  return (T) bar(T);
}

public static Object bar(Class<?> klaz) {
  return klaz.newInstance();
}
Run Code Online (Sandbox Code Playgroud)

但是代码没有编译,因为我不能用T代替Class <?>.
有了一个具体的类,我可以打电话,如:

bar(ConcreteClass.class);
Run Code Online (Sandbox Code Playgroud)

但同样对T不起作用.即没有T.class这样的东西

在C#中,typeof适用于具体和模板类型.所以,对bar的调用将是:

bar(typeof(T));
Run Code Online (Sandbox Code Playgroud)

但是我无法在Java中找到类似的东西.

我错过了什么,或者Java没有办法获取模板参数的类型?如果Java没有设施,是否有任何解决方法?

java generics

11
推荐指数
1
解决办法
3721
查看次数

C#:泛型类中的嵌套类是否应该被认为是通用的?

namespace GenericsTest
{
    public class AGenericClass<T>
    {
        public class NestedNonGenericClass
        {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,应该NestedNonGenericClass算是一个泛型类?

反射API说它是一个泛型类,甚至把包含类的模板参数作为嵌套类的模板参数.

Type nestedClass = typeof(AGenericClass<int>.NestedNonGenericClass);
Console.Out.WriteLine("IsGeneric: {0}\tHasGenericArguments: {1}", 
   nestedClass.IsGenericType, nestedClass.GetGenericArguments().Length > 0);
Run Code Online (Sandbox Code Playgroud)

打印出:

IsGeneric:True HasGenericArguments:True

我不完全同意这种行为.即使编译器为其生成泛型类型NestedNonGenericClass,我也想知道它是否是通用的,因为它是声明的,或者因为它的容器是通用的.

所以,我的问题是:

首先,你认为可以考虑嵌套类泛型,因为它的容器是通用的吗?为什么/为什么不呢?

其次,您是否碰巧知道其他一些API可以帮助我只识别声明为通用的类?

PS:我在ECMA规范中找不到与此相关的任何内容(或者我可能只是掩盖它).

- 编辑 -

为了添加更多的上下文,我正在开发一种代码生成器.我正在使用反射API来确定类型是否是通用的.

我遇到了一个问题Dictionary<TKey, TValue>.KeyCollection.

因为KeyCollection,反射API说它是通用的并且把我交给我,TKey并且TValue在容器中声明了它们.因此,发电机最终产生Dictionary<TKey, TValue>.KeyCollection<Tkey, TValue>

我能解决这个问题的唯一方法是将嵌套类的模板参数与容器匹配,并消除所有匹配的模板参数.但我想知道是否有更好的方法.

c# generics reflection

10
推荐指数
2
解决办法
4428
查看次数

在 Lua 项目中管理开发依赖关系的推荐方法是什么?

我正在构建一个 Lua 库(实际上是一个内部 kong 插件),这是我第一次使用 Lua - 更不用说用它编写生产代码了。

我已经把它变成了luarock。据我所知,它rockspec允许我指定其他库作为依赖项。但似乎不存在开发依赖性的概念。例如,我的测试、模拟等所需的库......我宁愿不让它们成为实际依赖项列表的一部分。

我已经将我的开发依赖项保留在依赖项列表中,但在 git 推送之前将它们注释掉。在生产 Lua 项目中通常如何解决这个问题?管理这些依赖关系的推荐方法是什么?

lua kong

5
推荐指数
1
解决办法
1075
查看次数

标签 统计

generics ×2

c# ×1

java ×1

kong ×1

lua ×1

reflection ×1