范型的困惑,spring源码中对范型及成员变量的疑问

private T doGetSingleton(String name, Class requiredType) throws NamingException {
Map var3 = this.singletonObjects;
synchronized(this.singletonObjects) {
Object jndiObject;
if (this.singletonObjects.containsKey(name)) {
jndiObject = this.singletonObjects.get(name);
if (requiredType != null && !requiredType.isInstance(jndiObject)) {
throw new TypeMismatchNamingException(this.convertJndiName(name), requiredType, jndiObject != null ? jndiObject.getClass() : null);
} else {
return jndiObject;
}
} else {
jndiObject = this.lookup(name, requiredType);
this.singletonObjects.put(name, jndiObject);
return jndiObject;
}
}
}
问题1 、方法返回类型为范型T,为什么可以return的是Object,而且并未用强转

问题2、Object jndiObject;作为局部变量为什么不需要给定一个初始值

3个回答

不是所有得类一般都默认继承Object对象得嘛,这个是向上,应该不用强得。第二个是赋值操作,不是调用操作,如果是get,一般需要初始化,但是这个是相当于set应该不用得把,自己可以试试,创建对象,不赋值,你调用得使用,下面赋值是不会让你强制赋值为一个值得,只有调用类似get方法得使用才会让你初始化赋值

qq_43263283
qq_43263283 这个我试过了,咱们自己不强转会编译错误
12 个月之前 回复

问题2,虽然局部变量没有给默认值,但是在后面的程序中对jndiObject进行了赋值

问题1,我看的只是class文件,其实源码是进行的强转,编译为class后class文件中没有了强转标识

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
范型
范型中的方法的返回值问题。 图中标出的函数返回值为Integer,编译报错,应为T为Number类或者以Number为父类的类,但不一定就是Integer类或者能转化为Integer类的类。。。(有些特殊情况可以,例如:在数值类型的赋值过程中,int double 等类型的数值,可以相互转化类型,但数值,可能发生变动。。) 把Integer换成Number后,编程成功。。。
对范型的疑惑
请问,到底该在什么时候用范型。
【Java范型五】范型继承
定义如下一个抽象的范型类,其中定义了两个范型参数,T1,T2   package com.tom.lang.generics; public abstract class SuperGenerics<T1, T2> { private T1 t1; private T2 t2; public abstract void doIt(T1 t...
【Java范型七】范型消除
范型是Java1.5引入的语言特性,它是编译时的一个语法现象,也就是说,对于一个类,不管是范型类还是非范型类,编译得到的字节码是一样的,差别仅在于通过范型这种语法来进行编译时的类型检查,在运行时是没有范型或者类型参数这个说法的。 范型跟反射刚好相反,反射是一种运行时行为,所以编译时不能访问的变量或者方法(比如private),在运行时通过反射是可以访问的,也就是说,可见性也是一种编译时的行为...
【Java范型四】范型方法
范型参数不仅仅可以用于类型的声明上,例如   package com.tom.lang.generics; import java.util.List; public class Generics<T> { private T value; public Generics(T value) { this.value = val...
【Java范型六】范型与枚举
首先,枚举类型的定义不能带有类型参数,所以,不能把枚举类型定义为范型枚举类,例如下面的枚举类定义是有编译错的   public enum EnumGenerics<T> { //编译错,提示枚举不能带有范型参数 OK, ERROR; public <T> T get(T type) { return null; } }...
jdk源码--范型
范型编程通过参数化的方式将数据处理与数据类型解耦,通过对数据类型进行约束来保证数据处理正确性。 java范型编译成字节码时,类型会在代码中被擦除,记录在Class文件的attribute域内,而在使用范型处做类型检查和类型转换。擦除规则为保留上界。 擦除后 为Object, 擦除后为A, 擦除后变为Object 在定义包含范型的类或者方法时,会使用到范型字母,E或者其他乱七八糟的
【Java范型三】Java范型详解之范型类型通配符
    定义如下一个简单的范型类,   package com.tom.lang.generics; public class Generics<T> { private T value; public Generics(T value) { this.value = value; } }      @...
Spring与范型DAO类的结合
前一阵子发了一篇Hibernate官网上面的一个范型DAO类支持的笔记,只是这个DAO类是基于Hibernate的实现,最近在项目中也参考了这个实现,并且与Spring结合在一起,加入了Spring的HibernateDaoSupport支持。具体代码如下。 IGenericDAO接口,这个接口与前一个帖子是一致的: Java代码 public interface IGenericDAO〈...
【Java范型一】Java范型详解之范型集合和自定义范型类
本文详细介绍Java的范型,写一篇关于范型的博客原因有两个,前几天要写个范型方法(返回值根据传入的类型而定),竟然想了半天,最后还是从网上找了个范型方法的写法;再者,前一段时间在看Gson, Gson这个JSON包的精华就在于对范型的优雅简单的处理,看它的源代码就比较迷糊,只其然不知其所以然。所以,还是花点时间系统的整理总结下范型吧。   范型内容 范型集合类 范型类 范型方法 ...
java 范型
类与方法都可以被范型化。类范型由类名后面跟上一个或几个三角括号包含的类型变量组成。   ArrayList<E>  代表的意思是ArrayList类里存放的数据类型,只能是E类型及其子类,如果不是,编译时会编译不通过。   public E get(int index) 代表的意义是该方法返回的类型是E类型,使用的时候可以直接当做E类型使用。 E是什么类型呢,E可以是任何...
范型的问题
IList mydata = new List();rn rn for (int i = 0; i < strtmp.Length; i++)rn rn if (strtmp[i].Trim().Length <= 0)rn continue;rn string[] tmp = strtmp[i].Split(',');rn string[] tmpdata = new string[200];rn for (int j = 0; j < tmp.Length; j++)rn rn tmpdata[j] = tmp[j];rn rn mydata.Add(tmpdata);rn rn rn我用范型做一个数组集合,其中每个数组的第一个变量是id(即tmp[0]),请问如何根据这个值来定位数据所在的行(即以tmp[0]作为索引),谢谢。
关于范型
哪位高手可以告诉我范型是什么?怎么用?
java范型
按照约定,类型参数名称命名为单个大写字母,以便可以在使用普通类或接口名称时能够容易地区分类型参数。以下是常用的类型参数名称列表 - E - 元素,主要由Java集合(Collections)框架使用。 K - 键,主要用于表示映射中的键的参数类型。 V - 值,主要用于表示映射中的值的参数类型。 N - 数字,主要用于表示数字。 T - 类型,主要用于表示第一类通用型参数。 S -
Java中范型通配符
泛型: 泛型只是在 编译期 保证对象类型相同的技术 真正在代码的运行期,jvm会擦出泛型的存在; 1. 只看尖括号里边的!!明确点和范围两个概念 2. 如果尖括号里的是一个类,那么尖括号里的就是一个点,比如List,List,List 3. 如果尖括号里面带有问号,那么代表一个范围, 代表小于等于A的范围,代表大于等于A的范围,代表全部范围 4. 尖括号里的所有点之间互相赋值都
范型的请教
[code=C#]class Genericer where T : new()rn rn public T GetItem()rn rn return new T();rn rn rn[/code]rnrn代码如上 希望大家帮忙解释一下上记代码的意思rnrn[color=#FF0000]where T : new()[/color] 什么意思rn另外vb.net中也可以这么实现吗?rnrn我刚刚接触范型 对他的认识基本没有rnrn希望各位同胞多多给出学习意见rnrn提供 学习资料 小人不胜感激rnrn请大家畅所欲言
Java范型
1.java泛型及就是在jdk1.5之后出现的一个新的安全机制 我们发现在集合框架中我们可以放入任何的元素,然而这样做并没有任何意义,绝大多时候我们是默认我们 知道这个容器需要存放什么样的内容,但是用户的输入是不安全的如果他们输入了各种类型然后我们只对某些类型 进行了处理显然到时候运行时必然报错 所以为了解决这个问题,类似于数组的解决方式给集合限定了类型使用尖括号来限定,当然
范型+dataGridView
范型集合用dataGridView现实时顺序与表的顺序不一致,rndataGridView1显示的是一种 再用dataGridView2显示又出现另一种顺序,rn这是为什么呢?与什么有关啊?
范型编程
范型编程(generic programming,GP) :编写不依赖数据类型的程序,数据类型的参数化。 #include find(iarray,iarray+SIZE,50); find(intVector.begin(),intVector.end(),50); 对于上面的find函数来说,它是algorithm库中的一个函数,其实它是一个算法的实现,它可以针对数组、向量等做查找操作
jdk1.5中的范型
JDK1.5 中引入了对 java 语言的多种扩展,泛型(generics)即其中之一。
范型在java中的应用
根据泛型在java中的不同位置,大致可以分为类泛型、方法泛型和接口泛型。以下三个Demo基本展现三种泛型的用法,其中接口泛型又分两种情况描述。类泛型和方法泛型 1 import java.util.ArrayList; 2 3 //类泛型 4 class DemoClass { 5 public void method(T t) { 6 Sys
范型声明
鉴于对范型声明的不明确,现作文以记之。 public class AdapterController&amp;lt;T&amp;gt; : AdapterRemoting.IRemoteController, ICommandHandler where T : IAlarmAdapter, new() 上面的非静态类中的T表示在AdapterController中会用到一个范型T,这个T需要...
程序设计语言范型
自1956年FORTRAN语言面世以来,几十年来出现了各种各样的高级语言。 从支持的计算模式来看有如下程序设计语言范型 强制(命令)式语言(imperative language) 也称过程式语言。这种语言是面向动作的,即一个计算过程看作一系列动作。 动作是命令驱动,以语句形式表示。函数式语言(functional language)也称为应用式语言。代表语言ML和LISP基于规则(逻辑)的
范型问题
protected IProxyFactory createProxyFactory(Class toMock) rn return new JavaProxyFactory();rn rnrn谁能看懂, 说一下
Java范型中的T和?
在代码中使用范型可以避免对象转型,降低了异常的出现。 范型仅仅是在编译期间起作用,在运行时范型信息会被擦除,所以可以利用反射跳过范型检查 public class SkipGenerics { public static void main(String[] args) throws Exception{ List&amp;lt;String&amp;gt; list = new A...
TypeScript中的范型
一、定义 比如我们有一个函数,如果不使用范型是这样的 function getData(arg: number): number { return arg; } 它只能传入number类型,如果我们要传入一个string类型的是编译不通过的,所以我们可以写另一个函数或者用any类型 function getData1(arg: string): string { return a...
Java编程之范型
在没有范型出现之前,Java也提供了对Object的任意化操作,这种任意化的操作时对Object引用进行  "向下转型的"及向上转型"操作,但是某型强制类型转化的错误也许不会被编译器捕捉,因此就发展出了范型的机制.实际上范型和C++中的模板基本差不多.起到的就是替代的作用. public class MyTest {     private T over;     public T
使用范型
范型的作用:类型安全检查,不用对集合中的对象进行手动类型转换。 1.Generics类public class ArrayList&amp;lt;E&amp;gt; extends AbstractList&amp;lt;E&amp;gt; {   // details omitted   public void add(E element) {    // details omitted5   }   public Itera...
程序设计范型
要支持一种范型,不仅在于某些能直接用于该种范型的显见形式的语言功能,还在于一些形式上更加细微的,对无意中偏离了这种范型的情况做编译时或者运行时的检查。类型检查是这类检查中的最明显例子。 程序设计范型发展: 1.过程式程序设计 原始的程序设计范型是:确定你需要哪些过程,采用你能找到的最好的算法。 double sqrt(double arg) { //计算平方根的代码 }
范型和反射
class &amp;lt;?&amp;gt; 和 class&amp;lt;T&amp;gt; 的区别 http://blog.csdn.net/witewater/article/details/53462385Class&amp;lt;?&amp;gt; clazz = Class.forName(&quot;kown.reflect.Show&quot;);           object.getClass(); 类名.class   的区别  http...
关于范型....
这种rn[code=Java]rn static Collection select(Class cls,ResultSet rs) rn Collection result = new ArrayList();rn while(rs.next())rn T item = getItem(cls, rs);rn result.add(item);rn rn return result;rn rn[/code]rn和这种有什么区别,上边的好处在那里rn[code=Java]rn Collection select(Class cls,ResultSet rs) rn Collection result = new ArrayList();rn while(rs.next())rn Object item = getItem(cls, rs);rn result.add(item);rn rn return result;rn rn[/code]
范型求助
一个类,自身编译可以通过,加上下面的main函数里的内容就编译通不过了rnrnpublic class Test> rnrnrn //怎么用这个类啊,试了半天都不行,快晕死了rnrn public static void main(String[] args) rn// Test> test = null; //编译通不过...rn rnrnrn求助如何才能用?
java6中范型的问题
java6中不支持自定义范型这是为什么啊?
Java中范型的重载
问题: 什么是范型??? 答案:java中可以用T或其他大写字母代替一个未知的类型,例如 定义类的时候 class A&amp;lt;T&amp;gt;中的T就是一个范型,T可以代替任何类型或者类。 问题:为什么java的范型是一个假范型?? 答案:因为java的代码在编译成class文件之后,会将范型给去掉。会用object代替范型。所以java的范型是假范型。 例如: ` public (T) List&amp;l...
c#范型与java范型有什么区别
今天和同事争论范型rn我是这样认为的,范型类似于c++摸板,其声明符类似于一个占位符,在编译完毕运行时提供类型,所以避免了object的装箱和拆箱操作,比object运行效率高。rn同事是搞java的,他认为范型还是在运行时进行了拆装箱操作,只是避免的程序员编写代码时的显示拆箱代码,而运行时的拆装箱操作还是由jdk自动进行了。rnrn我认为这样不对,如果是这样那么范型除了提供强制类型外和object没有很大的区别,也没有效率的提升。本人在查看资料的时候也确实看到了c# 中的范型避免了拆装操作,从而提升了基础类型的执行效率。所以求各位给解~~~~多谢多谢
范型 多个类型的实例 --java编程之范型
import java.util.HashMap; import java.util.Map; import java.util.*; public class Test {     public Map m=new HashMap();          public void put(K k,V v)     {         m.put(k, v);     }   
还是范型........
在这上面看了个反响,感觉不错 http://lsy.javaeye.com/blog/220264 但有个疑问,请大家帮忙看看rnrn[code=Java]public String[] getPayments(String[] payments, List products) rn return payments;rnrnrnMethod getPayments = BaseOrder.class.getMethod("getPayments",rn new Class[] String[].class, List.class );rntypes = getPayments.getGenericParameterTypes();rnassertTrue("The first parameter of this method is GenericArrayType.",rn types[0] instanceof GenericArrayType);rnGenericArrayType gType = (GenericArrayType) types[0];rnassertEquals("The GenericArrayType's component is String.",rn String.class, gType.getGenericComponentType());rn rn[/code]rnrn这段很有意思,总感觉把 type[0] 也就是 String[] ,能够assert成 GenericArrayType 有点说不过去rnrn例如:rn如果修改一下 getPayments 为rn[code=Java]public String[] getPayments(String payments, List),[/code]rn相应的修改rn[code=Java]Method getPayments = BaseOrder.class.getMethod("getPayments",rn new Class[] String.class, List.class);[/code]rnrn那么types = getPayments.getGenericParameterTypes();rntypes[0] 就不是 ParameterizeType 了,而是String.classrnrnrn再例如:rnrn如果修改一下 getPayments 为rn[code=Java]public String[] getPayments(String[] payments),[/code]rn相应的修改rn[code=Java]Method getPayments = BaseOrder.class.getMethod("getPayments",rn new Class[] String[].class);[/code]rnrn那么types = getPayments.getGenericParameterTypes();rntypes[0] 就不是GenericArrayType了,而是String[].classrnrnrn疑问 :rn这怎么解释呢? 怎么偏偏只有rn[code=Java]public String[] getPayments(String[] payments, List products) 的 types[0] 是 GenericArrayType[/code]rnrnrn
Java 范型
简介范型(generic)可以参数化类型,这个能力使我们可以定义带范型类型的类或方法,随后编译器会用具体的类型来替换它。
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview