您认为类字符串在Java中实现了接口吗
我这样做是为了我自己的理解,我不理解这个问题 假设有一个名为Compariable的接口,如下所示 定义: 您认为类字符串实现的接口可比吗?提供 你回答的理由您认为类字符串在Java中实现了接口吗,java,class,interface,Java,Class,Interface,我这样做是为了我自己的理解,我不理解这个问题 假设有一个名为Compariable的接口,如下所示 定义: 您认为类字符串实现的接口可比吗?提供 你回答的理由 我会说不,因为课堂上没有绳子,但我相信我误解了这个问题。有人能给我更好地解释一下吗?您应该查看类String的源代码或Java文档。它显式地实现了接口Comparable java.lang 类字符串 java.lang.Object java.lang.String 所有实现的接口: 可序列化,字符序列,可比较 如果要检查给定类是否实
我会说不,因为课堂上没有绳子,但我相信我误解了这个问题。有人能给我更好地解释一下吗?您应该查看类
String
的源代码或Java文档。它显式地实现了接口Comparable
java.lang
类字符串
java.lang.Object
java.lang.String
所有实现的接口:
可序列化,字符序列,可比较如果要检查给定类是否实现了某些接口或其他类,可以使用
instanceof
:
System.out.println("string" instanceof Comparable);
您还可以尝试从给定接口执行方法:
"one".compareTo("two")
在这种情况下,将编译代码或显示相应的错误消息
但是,最好的方法是读取给定类的源代码。在这种情况下,您不必编写任何附加代码。此外,一个好的IDE(如Eclipse、Intellij Idea)可以帮助找到答案。我将为您提供关于这个问题的其他观点,我将说不,它没有。
由于Java 6,Java.lang.String无法实现该接口,因为它与
Comparable
不兼容,Comparable
与Comparable
不同。区别在于无法将字符串
与对象
字符串进行比较
Why it does so?
因此,可以使用compareTo方法对字符串进行排序。
例如,您希望根据员工的姓名和姓名对员工进行排序,因此您可以将其用作:-
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
public class Employee implements Comparable {
String name;
public Employee(String name) {
this.name = name;
}
public int compareTo(Object o) {
Employee employeeAnother = (Employee) o;
// natural alphabetical ordering by type
// if equal returns 0, if greater returns +ve int,
// if less returns -ve int
return this.name.compareTo(employeeAnother.name);// String compareTo is
// called here
}
public static void main(String[] args) {
List list = new ArrayList();
list.add(new Employee("Ramesh"));
list.add(new Employee("Deepak"));
list.add(new Employee("Vivek"));
Collections.sort(list); // sorts using compareTo method
for (Iterator iter = list.iterator(); iter.hasNext();) {
Employee employee = (Employee) iter.next();
System.out.println(employee);
}
}
public String toString() {
return name;
}
}
我没有使用泛型来使事情简单化。您将收到很少的警告,但您可以忽略这些警告。是!!
在Java8中;打开Java文档,您将发现以下内容:
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence
公共最终类字符串
实现java.io.Serializable、Comparable、CharSequence
-但我想问题是针对您的解释。。。你在那门课上用的是旧版本的Java吗?我也不明白这个问题。你必须猜测字符串是否实现这个接口?你被要求考虑给定的<代码>可比的<代码>接口,然后给出你的有教育的意见,那就是“代码>字符串可以或应该实现的。确切的答案取决于两件事:这是否是代码> java?无论我们是不是Java 5之前的版本,都在谈论或是另一个同名接口。我刚刚阅读了文档http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html
它说您需要一个参数化的参数,是的,我只是尝试了一下,因为泛型使它稍微复杂一些<代码>可比foo=“foo”例如,代码>将编译。但是如果您随后运行foo.compareTo(newobject())
,您将在运行时得到一个ClassCastException
。而“foo”.compareTo(新对象())
甚至不会编译。这一切都与类型擦除的工作方式有关。重要的是,您不能将字符串
与任何对象进行比较,它将在编译时或运行时失败。您的第一个示例将编译,但您也会收到一条警告,告诉您正在使用原始数据,ClassCastException
是使用错误参数的结果。事实上,如果你做了Comparable foo=“foo”
,它也不会编译。是的,但是你可以将字符串
强制转换为Comparable
严格来说意味着字符串
实现了Comparable
。(事实上确实如此,如果您反编译类文件,您将在其中看到一个公共布尔比较器(Object)
方法。)但编译器将尽力阻止您将字符串与任何非字符串对象进行比较。
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence