在JAVA中返回类型使用泛型T和Object有什么区别?
最近在读jackson源码的时候发现有段代码返回类型写的是<T> T,而我自己一般写的是Object。上网搜了下这个语法糖,在stackoverflow上找到一个比较简单易懂的解释,搬运过来(https://stackoverflow.com/questions/5207115/java-generics-t-vs-object)
问题:下面2个方法的声明有何不同
public Object doSomething(Object obj) {....} public <T> T doSomething(T t) {....}
答案:
单从上文2个方法声明来说-没有区别。无论是t 还是 obj,你都只能调用Object类型的参数和返回值。
但是基于上面2个方法,如果你有一个使用了泛型的类:
MyClass<Foo> my = new MyClass<Foo>(); Foo foo = new Foo();
就可以这么写:
Foo newFoo = my.doSomething(foo);
但是如果是使用object的话,就得这么写
Foo newFoo = (Foo) my.doSomething(foo);
由此可见,使用泛型,有2个好处:
1.不需要做强制类型转换
2.编译时更安全。如果使用Object类的话,你没法保证返回的类型一定是Foo,也许是其它类型。这时你就会在运行时得到一个类型转换异常(ClassCastException)
转载:https://www.cnblogs.com/xujanus/p/8474553.html
带着疑问去思考,然后串联,进而归纳总结,不断追问自己,进行自我辩证,像侦查嫌疑案件一样看待技术问题,漆黑的街道,你我一起寻找线索,你就是技术界大侦探福尔摩斯
推荐这些文章:
通常结构体不能进行链式调用,因为返回值是一个新的值,需要赋回原值。但现在通过ref关键字配合扩展方法,也能进行链式调用了。
结构体:
public struct Foo
{
public int a;
public Foo AddOne()
{
a++;
return this;
}
public Foo AddTwo()
{
a += 2;
return this;
}
}
执行测试:
Foo foo = new Foo();
...
问题
是这样
List<myclass> classlist = new List<myclass>();
Object _obj = classlist as Object;
int i = doObject(_obj);
public intdoObject(Object _obj){
返回classlist的count
}
最佳回答
classlist.Count 可以直接取到,你还需要什么intdoObject()? ...
使用类做为Dictionary<T,K>的key需什么要求?
问题
<P> </P>
最佳回答
没有要求
...
问题
再看CLR时,看到基元类型。
其他基元类型都是值类型。
只有 object 和 string 是引用类型。
why?
最佳回答
看重点,不要再命名上去纠结,只是.net这么叫的而已
...
在声明类对象时,如果想调用类的无参构造函数,一般会直接声明,不加括号。举个例子
class Foo {
public:
Foo() {
std::cout << "constructor without arguments called";
}
void show(){
std::cout << "show foo";
}
}
int main() {
Foo foo; //运行正常
//Foo foo{}; //运行正常
...
<!-- jetty 插件配置 --><plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>7.1.6.v20100715</version> <configuration> <stopPort>9988</stopPort> <stopKey>foo</stopKey> ...
const valType = (target) => {
const template = {
"[object Array]":"array",
"[object Object]":"object",
"[object Number]":"number",
"[object Boolean]":"boolean",
"[object String]":"string"
}
if(!target) return 'null';
const t = Object.prototype.toStr...
问题
返回集合使用IEnumerable<>还是IList<>
那个好啊
最佳回答
一般都是用IEnumerable<>
如果能返回明确类型的话,那么返回明确类型会更好。
...
1. <build>
1.1 <resources>
编译保留 *.propertie s,*.xml
1.2 <plugins>
拷贝config目录
Java 1.8 编译
一般打包(无Spring)
Spring 打包
2. <properties>
编码 编译版本
1. <build>
1.1 <resources>
编译保留 *.propertie s,*.xml
<resource>
<directory>src/main/java</dire...
文章链接:https://www.dianjilingqu.com/51560.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。