Java 将泛型类型分配给类类型的变量
我怎样才能实现我想要的,即分配一个模式而不是一个简单的类型?Java 将泛型类型分配给类类型的变量,java,instanceof,Java,Instanceof,我怎样才能实现我想要的,即分配一个模式而不是一个简单的类型? 如果Java中不允许,是否有其他合适的方法来测试变量是否是定义为模式的类型的实例?编译后泛型将被删除。 因此,即使此代码有效,也无法进一步帮助您: Class clazz = Long.class; // this works fine 我认为这应该重新考虑你的逻辑。 泛型主要是为了提高类型安全性而设计的,它机械地降低了对测试和降级的实例的要求 如果Java中不允许,是否有其他合适的方法来测试 变量是定义为模式的类型的实例 通过在泛
如果Java中不允许,是否有其他合适的方法来测试变量是否是定义为模式的类型的实例?编译后泛型将被删除。
因此,即使此代码有效,也无法进一步帮助您:
Class clazz = Long.class; // this works fine
我认为这应该重新考虑你的逻辑。泛型主要是为了提高类型安全性而设计的,它机械地降低了对测试和降级的
实例的要求
如果Java中不允许,是否有其他合适的方法来测试
变量是定义为模式的类型的实例
通过在泛型类中添加class
字段,可以存储泛型实例中指定的类型。但当您使用内置类型时,您会被卡住。
使用您自己的类,您可以通过以下方式捕获信息,例如:
if (clazz.isInstance(myVariable)) {
// do something
}
公共类Foo{
私有映射映射=新的HashMap();
私有类tClass;
私家舱;
私有类vClass;
公共食品(t类、u类、v类){
this.tClass=t;
this.uClass=u;
这个.vClass=v;
}
}
因此,您可以使用tClass
、uClass
、vClass
执行所需的检查。
但是如上所述,继续这样做可能不是最好的办法。您无法检查是否有HashMap
的实例
尽管语法暗示HashMap
是一个单独的东西,但该类型实际上意味着:
- 这种类型的变量在运行时将保存一个
HashMap
(或null)
- 如果我试图放入或取出一个非
长的
键,我希望编译器阻止我,如果我试图放入或取出任何非HashMap
的键和值属于该特定类型,编译器也会阻止我
s之间的位纯粹是编译时提示。在运行时没有什么可测试的
如果映射不是空的,您可以检查它是否包含任何违反类型约束的键或值
但是,除了只能在映射为非空且包含非空键和值时执行此操作外,它不会告诉您它是否是HashMap
,而是告诉您它是HashMap,我认为这是不可能的,因为运行时类型擦除。我需要它以便以后能够在.isInstance()表达式中使用它,-因为您将无法在运行时根据泛型类型验证实例。进一步阅读:您还可能希望阅读:
HashMap<Long, HashMap<String, Semaphore>> map = new HashMap<>();
Class<?> clazz = map.getClass();
if (clazz.isInstance(myVariable)) {
// do something
}
public class Foo<T, U, V> {
private Map<T, HashMap<U, V>> map = new HashMap<>();
private Class<T> tClass;
private Class<U> uClass;
private Class<V> vClass;
public Foo(Class<T> t, Class<U> u, Class<V> v) {
this.tClass = t;
this.uClass = u;
this.vClass = v;
}
}