JAVA泛型...困惑了......

sapala__ 2010-03-26 04:35:59
class Template<template> {
private template Member;
Template(template Member){
this.Member = Member;
}
public void Print(){
System.out.println(this.Member.toString());
}
}
public class InterfaceTemplateDemo{
public static <template> Template<template> Fun(template param){
//为什么必须在static后面加上<template>否则提示说无法解析template??
//个人认为按照格式
//public static Template<template> Fun(template param)
//就可以了...
return new Template<template>(param);
}
public static void main(String args[]){
Fun("127.0.0.1").Print();
}
}
...全文
163 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
hdxhdx_wdtx 2010-03-26
  • 打赏
  • 举报
回复
JKLJLJ
qybao 2010-03-26
  • 打赏
  • 举报
回复
[Quote=引用楼主 sapala__ 的回复:]
Java code
class Template<template> {
private template Member;
Template(template Member){
this.Member = Member;
}
public void Print(){
System.out.println(this.Mem……
[/Quote]

LZ如果仔细比较两个类就清楚了
第一个<template>是放在类之后,也就是声明类的同时也声明template,如果用作用域来比喻的话,那么template在整个类中是有效的,当然这样也限定了该类生成实例时必须指明一个template
而第二个类,除了该static方法外,其他地方并没有声明tamplate,试问,如果不声明,该类又怎么能认识该template呢?从第一个类可知,如果在类后声明template,虽然整个类都可以使用,但是生成实例时也必须要指定template,而第二个类并不想在生成实例时指定一个template,只想在该static方法中使用template,那么template就只能声明在static方法中
static <template> Template<template>中的Template<template>是一种类型,该template并不是声明,只是因为第一个类是这样定义的,所以要使用该类时也要指定template,而static <template>中的template才是对tempate的声明,所以不要搞混了。
24K純帥 2010-03-26
  • 打赏
  • 举报
回复
多搞几个泛型就明白了,没什么难的
gao4263 2010-03-26
  • 打赏
  • 举报
回复
就是C++中的模板,没什么吧,多了个<template>
ifrancis 2010-03-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wts 的回复:]
你的写法有点问题:

Java code
public class InterfaceTemplateDemo{
public static Template<String> Fun(String param){
//为什么必须在static后面加上<template>否则提示说无法解析template??
//个人认为按照格式
……
[/Quote]如此如此
qqbin1314 2010-03-26
  • 打赏
  • 举报
回复
这个我也不明白,有高手来说清楚
wts 2010-03-26
  • 打赏
  • 举报
回复
你的写法有点问题:
public class InterfaceTemplateDemo{
public static Template<String> Fun(String param){
//为什么必须在static后面加上<template>否则提示说无法解析template??
//个人认为按照格式
//public static Template<template> Fun(template param)
//就可以了...
return new Template<String>(param);
}
public static void main(String args[]){
Fun("127.0.0.1").Print();
}
}

这样就可以了,因为你是要实用泛型类,而不是定义新的泛型类。
定义Template类的时候,已经定义泛型template了,而在使用Template的时候,要把template替换为具体的类型。
我这里是替换成String类型,你也可以替换为其他任意类型。
soli11722984 2010-03-26
  • 打赏
  • 举报
回复
ER....继续打错,返回Set<E>就好
sapala__ 2010-03-26
  • 打赏
  • 举报
回复
请问2L
Template<template>

这句中不是有<template>的吗? 为什么不行的?
soli11722984 2010-03-26
  • 打赏
  • 举报
回复
。。。。。。上面打错了


Set<Integer> integers = ...;
Set<Double> doubles = ...;
Set<Number> numbers = function(integers ,doubles);

public static <T> Set<? extends T> function(Set<? extends T> s1,Set<? extends T){
Set<? extends T> set = new Hashset<? extends T>();
set.addAll(s1);
set.addAll(s2);
....
return set;
}

soli11722984 2010-03-26
  • 打赏
  • 举报
回复
那个还是有用的

Set<Integer> integers = ...;
Set<Double> doubles = ...;
Set<Number> numbers = function(integers ,doubles);

public static <Number> T function(Set<? extends T> s1,Set<? extends T){
Set<? extends T> set = new Hashset<? extends T>();
set.addAll(s1);
set.addAll(s2);
....
return set;
}


这时候,<Number>就有用了,当你没加上的时候,就报错
amos1989 2010-03-26
  • 打赏
  • 举报
回复
这个你不明白??
public static <template> Template<template> Fun(template param){}
如果你把<template>去掉,那代码是:
public static Template<template> Fun(template param){}
首先可以理解Template是一个类.那template列???是什么??
所以必须加上<template>这样写,编译器才知道,他是泛型.
knightzhuwei 2010-03-26
  • 打赏
  • 举报
回复
java就是这么规定的 泛型方法就是要这么写的

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧