泛型问题求解

kyj15901951433 2014-11-17 12:32:48
class ComByLen implements Comparator<String>
{
public int compare(String s1,String s2){
int temp=s1.length()-s2.length();
return temp==0?s1.compareTo(s2):temp;

}
}
class ComByLen<String> implements Comparator<String>
{
public int compare(String s1,String s2){
int temp=s1.length()-s2.length();
return temp==0?s1.compareTo(s2):temp;

}
}
下面的代码会出现问题,请问是什么原因?
...全文
211 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
百里马 2014-11-17
  • 打赏
  • 举报
回复
能通过编译吗? 你在定义类的时候要定义泛型应该是形如T之类的 而实际的类型是在运行时传进去的~
江南小鱼 2014-11-17
  • 打赏
  • 举报
回复
会出什么问题?
kyj15901951433 2014-11-17
  • 打赏
  • 举报
回复
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class CollectionsDemo2
{
	public static void main(String[] args){
		demo1();
	}
	public static void demo1(){
		List<String> list=new ArrayList<String>();
		list.add("ags");
		list.add("edn");
		list.add("afdb");
		list.add("adsn");
		list.add("ab");
		
		System.out.println(list);
		mySort(list);
		//Collections.sort(list);
		System.out.println(list);
		mySort2(list,new ComByLen());//Collections.sort(list,new ComByLen());
		System.out.println(list);
		
	}
	public static <T> void mySort2(List<T> list,Comparator<? super T> com){
		for(int i=0;i<list.size()-1;i++){
			for(int j=i;j<list.size();j++){
				if(com.compare(list.get(i),list.get(j))>0){
					T temp=list.get(i);
					list.set(i,list.get(j));
					list.set(j,temp);
				}
			}
		}
	}
	public static<T extends Comparable<? super T>> void mySort(List<T> list){
		for(int i=0;i<list.size()-1;i++){
			for(int j=i;j<list.size();j++){
				if(list.get(i).compareTo(list.get(j))>0){
					T temp=list.get(i);
					list.set(i,list.get(j));
					list.set(j,temp);
				}
			}
		}
	}
}
class ComByLen<String> implements Comparator<String>
{
	public int compare(String s1,String s2){
		int temp=s1.length()-s2.length();
		return temp==0?s1.compareTo(s2):temp;
		
	}
}
---------- JAVAC ---------- CollectionsDemo2.java:52: 错误: 找不到符号 int temp=s1.length()-s2.length(); ^ 符号: 方法 length() 位置: 类型为String的变量 s1 其中, String是类型变量: String扩展已在类 ComByLen中声明的Object CollectionsDemo2.java:52: 错误: 找不到符号 int temp=s1.length()-s2.length(); ^ 符号: 方法 length() 位置: 类型为String的变量 s2 其中, String是类型变量: String扩展已在类 ComByLen中声明的Object CollectionsDemo2.java:53: 错误: 找不到符号 return temp==0?s1.compareTo(s2):temp; ^ 符号: 方法 compareTo(String) 位置: 类型为String的变量 s1 其中, String是类型变量: String扩展已在类 ComByLen中声明的Object 注: CollectionsDemo2.java使用了未经检查或不安全的操作。 注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。 3 个错误 输出完成 (耗时 1 秒) - 正常终止
kyj15901951433 2014-11-17
  • 打赏
  • 举报
回复
抱歉,我没说清楚问题; 下面是源代码 [code=javaimport java.util.List; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; public class CollectionsDemo2 { public static void main(String[] args){ demo1(); } public static void demo1(){ List<String> list=new ArrayList<String>(); list.add("ags"); list.add("edn"); list.add("afdb"); list.add("adsn"); list.add("ab"); System.out.println(list); mySort(list); //Collections.sort(list); System.out.println(list); mySort2(list,new ComByLen());//Collections.sort(list,new ComByLen()); System.out.println(list); } public static <T> void mySort2(List<T> list,Comparator<? super T> com){ for(int i=0;i<list.size()-1;i++){ for(int j=i;j<list.size();j++){ if(com.compare(list.get(i),list.get(j))>0){ T temp=list.get(i); list.set(i,list.get(j)); list.set(j,temp); } } } } public static<T extends Comparable<? super T>> void mySort(List<T> list){ for(int i=0;i<list.size()-1;i++){ for(int j=i;j<list.size();j++){ if(list.get(i).compareTo(list.get(j))>0){ T temp=list.get(i); list.set(i,list.get(j)); list.set(j,temp); } } } } } class ComByLen<String> implements Comparator<String> { public int compare(String s1,String s2){ int temp=s1.length()-s2.length(); return temp==0?s1.compareTo(s2):temp; } }][/code] ---------- JAVAC ---------- CollectionsDemo2.java:52: 错误: 找不到符号 int temp=s1.length()-s2.length(); ^ 符号: 方法 length() 位置: 类型为String的变量 s1 其中, String是类型变量: String扩展已在类 ComByLen中声明的Object CollectionsDemo2.java:52: 错误: 找不到符号 int temp=s1.length()-s2.length(); ^ 符号: 方法 length() 位置: 类型为String的变量 s2 其中, String是类型变量: String扩展已在类 ComByLen中声明的Object CollectionsDemo2.java:53: 错误: 找不到符号 return temp==0?s1.compareTo(s2):temp; ^ 符号: 方法 compareTo(String) 位置: 类型为String的变量 s1 其中, String是类型变量: String扩展已在类 ComByLen中声明的Object 注: CollectionsDemo2.java使用了未经检查或不安全的操作。 注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。 3 个错误 输出完成 (耗时 1 秒) - 正常终止
放纵的青春 2014-11-17
  • 打赏
  • 举报
回复
问题描述不清晰
Thanksgiving_Heart 2014-11-17
  • 打赏
  • 举报
回复
这有什么奇怪的,本来就这样,你怎么能用2个同样的类名去实现同一个接口呢
huanongying131 2014-11-17
  • 打赏
  • 举报
回复
ComByLen已被定义 泛型檫除 即CombyLen<String>经过檫除后变为ComByLen 所以会出现ComByLen已定义错误

62,621

社区成员

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

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