博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java t和t类型变量比较,java – 为什么“t instanceof T”不允许,其中T是类型参数,t是变量?...
阅读量:4955 次
发布时间:2019-06-12

本文共 1101 字,大约阅读时间需要 3 分钟。

Eclipse表示,由于泛型橡皮擦,Type Parameter不允许使用instanceof操作.

我同意在运行时,不会保留类型信息.但请考虑以下类的通用声明:

class SomeClass{

T t;

SomeClass(Object o){

System.out.println(o instanceof T); // Illegal

}

}

在运行时,不会出现T!但是如果我实例化这个类型为Integer的类,那么相应的对象将具有Integer类型的字段t.

那么,为什么我不能用T检查变量的类型,它可以在运行时被Integer替换.而我实际上会做类似“o instanceof Integer”的事情.

在哪些情况下,允许带有类型参数的instanceof会导致故障,从而禁止它?

如果在运行时需要T,则需要在运行时提供它.这通常通过传递Class< T>来完成. T必须是.

class SomeClass {

final T t;

public SomeClass(Class tClass,T t) {

if(!tClass.isAssignableFrom(t.getClass()) throw new IllegalArgumentException("Must be a " + tClass);

this.t = t;

}

private SomeClass(T t) {

this.t = t;

}

public static SomeClass of(Class tClass,T t) {

if(!tClass.isAssignableFrom(t.getClass()) throw new IllegalArgumentException("Must be a " + tClass);

return new SomeClass(t);

}

}

// doesn't compile

SomeClass intSomeClass = SomeClass.of(Integer.class,"one");

Class clazz = Integer.class;

// compiles with a warning and throws an IAE at runtime.

SomeClass intSomeClass = (SomeClass) SomeClass.of(clazz,"one");

// compiles and runs ok.

SomeClass intSomeClass = SomeClass.of(Integer.class,1);

转载地址:http://ykyhp.baihongyu.com/

你可能感兴趣的文章
LeetCode 205. 同构字符串(Isomorphic Strings)
查看>>
sql语句
查看>>
navicat连接阿里云mysql数据库服务器遇到的1130等相关问题
查看>>
Idea中更改主题后xml配置文件局部黄色背景颜色去除
查看>>
github绑定host
查看>>
设计模式
查看>>
cocos2dx android平台事件系统解析
查看>>
(20):(行为型模式) Chain Of Responsibility 职责链模式
查看>>
robots.txt 文件指南
查看>>
SpringCloud-服务的消费者(rest+ribbon)
查看>>
Linux下实现 MySQL 数据库定时自动备份
查看>>
sql统计重复数据
查看>>
使用类的静态字段和构造函数,可以跟踪某个类所创建对象的个数
查看>>
Datatables事件
查看>>
Docker端口映射
查看>>
equals和==的区别
查看>>
Android6.0指纹识别开发
查看>>
java反射机制剖析(二)— Class Loader
查看>>
走进C++程序世界------异常处理
查看>>
通过用户模型,对数据库进行增删改查操作。
查看>>