有谁知道如何使用泛型编写下面的代码并避免编译器警告?(@SuppressWarnings("未选中")被视为作弊).
并且,也许,通过泛型检查"左"的类型是否与"右"的类型相同?
public void assertLessOrEqual(Comparable left, Comparable right) {
if (left == null || right == null || (left.compareTo(right) > 0)) {
String msg = "["+left+"] is not less than ["+right+"]";
throw new RuntimeException("assertLessOrEqual: " + msg);
}
}
Run Code Online (Sandbox Code Playgroud) Comparable w[] = new Comparable[5];
w[0] = 1;
w[1] = "string";
w[2] = 2.0;
Run Code Online (Sandbox Code Playgroud)
这是一个好方法吗?实际上为什么它可以工作(我只是随机尝试)?也许是因为Comparable扩展了Integers,Strings,Doubles等?所以呢?
我有一个条目矢量.每个条目都是此类的一个实例:
public class Entry implements Comparable<Entry>{
private String _key;
private CustomSet _value;
[...]
@Override
public int compareTo(Entry a) {
return this._key.compareTo(a._key);
}
}
Run Code Online (Sandbox Code Playgroud)
向量声明如下:
Vector<Entry> entries = new Vector<Entry>();
Run Code Online (Sandbox Code Playgroud)
之后,填充向量.然后我想检查某个键是否在向量中的某个位置.所以我这样做:
Entry sample = new Entry(key, new CustomSet());
if (entries.contains(sample)) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用.为什么?我怎样才能让它发挥作用?
PS CustomSet是另一个用户定义的类,与我的观点无关
从这个链接
名称对象是不可变的.在所有其他条件相同的情况下,不可变类型是可行的方法,特别是对于将在集合中用作元素或在地图中用作键的对象.如果您在集合中修改元素或键,这些集合将会中断.我们怎么知道"Name"这个类是不可变的?(上面提到的链接中可见类名)
它们实际上意味着什么"如果你修改它们的元素,那么这些集合会破裂?"
提前致谢.
快速示例是用户名和姓的集合.
一种方法要求我使用名字进行比较,使用姓氏进行比较.是否有可能有两个不同的compareTo()?
或者我最好创建两个不同的值类?
我正在为AP计算机科学考试做准备,我对文本对Integer课程的讨论感到困惑.
文本定义Integer的compareTo,如下所示:
int compareTo(Object other)
Run Code Online (Sandbox Code Playgroud)
从一开始我就知道它会有一个Object参数,因为我认为这是它可以实现的唯一方法Comparable.但是,我最终查看了IntegerEclipse 中的类,我发现它使用了泛型Comparable,因此compareTo使用Integer参数定义.
这是我书中的错误吗?这使我相信,这是铸造Object成Integer的方法,这是错误的(并就考试的差别).我在这里错过了什么吗?
我读到使用带有这样的超级通配符:
public class MyClass <T extends Comparable<? super T>> {
...
}
Run Code Online (Sandbox Code Playgroud)
代替:
public class MyClass <T extends Comparable<T>> {
...
}
Run Code Online (Sandbox Code Playgroud)
可以让这个班级"更通用",但我不明白为什么.
有人能提供一些具体的例子吗?
我正在Java中为学校实现合并排序算法.
它应该能够采取任何可比较的对象.
我创建了一个静态mergeSort(ArrayList输入)方法,但显然我不能将ArrayList或ArrayList转换为ArrayList,即使它们都实现了可比性.
如何表示可比数据的ArrayList?
这是写在所有的java像样的课程,如果你实现了Comparable接口,你应该(在大多数情况下)还覆盖equals以匹配其行为的方法.
不幸的是,在我目前的组织中,人们试图说服我完全相反.我正在寻找最有说服力的代码示例,向他们展示将要发生的所有邪恶.
我试图使用类似的接口来排序随机生成的数组,但我收到错误消息:
不兼容的类型:int []无法转换为Comparable []
int [] list;
list = new int[n];
for(int i=0;i<n;i++){
list[i]=(int)(1+n*Math.random());
}
sortingoutsorts.bubble(list);
}
private static void swap(Object [] list, int x, int y)
{
Object temp=list[x];
list[x]=list[y];
list[y]=temp;
}
public static void bubble(Comparable [] list)
{
boolean done=false;
while(!done)
{
done=true;
for(int i=0; i+1<list.length; i++)
if(list[i].compareTo(list[i+1])>0)
{ swap(list,i,i+1); done=false; }
}
}
Run Code Online (Sandbox Code Playgroud)