Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
您认为类字符串在Java中实现了接口吗_Java_Class_Interface - Fatal编程技术网

您认为类字符串在Java中实现了接口吗

您认为类字符串在Java中实现了接口吗,java,class,interface,Java,Class,Interface,我这样做是为了我自己的理解,我不理解这个问题 假设有一个名为Compariable的接口,如下所示 定义: 您认为类字符串实现的接口可比吗?提供 你回答的理由 我会说不,因为课堂上没有绳子,但我相信我误解了这个问题。有人能给我更好地解释一下吗?您应该查看类String的源代码或Java文档。它显式地实现了接口Comparable java.lang 类字符串 java.lang.Object java.lang.String 所有实现的接口: 可序列化,字符序列,可比较 如果要检查给定类是否实

我这样做是为了我自己的理解,我不理解这个问题

假设有一个名为Compariable的接口,如下所示 定义:

您认为类字符串实现的接口可比吗?提供 你回答的理由


我会说不,因为课堂上没有绳子,但我相信我误解了这个问题。有人能给我更好地解释一下吗?

您应该查看类
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