📜  Java Java类

📅  最后修改于: 2022-05-13 01:54:37.898000             🧑  作者: Mango

Java Java类

Java 7 提出了一个新类Objects ,它有 9 个静态实用方法来操作对象。这些实用程序包括用于计算对象哈希码、返回对象字符串以及比较两个对象的空值安全方法。

使用 Objects 类方法,可以巧妙地处理 NullPointerException,还可以显示自定义的 NullPointerException 消息(如果发生异常)。

  1. String toString(Object o) :此方法为非空参数返回调用 toString() 方法的结果,为空参数返回“null”。
    Syntax : 
    public static String toString(Object o)
    Parameters : 
    o - an object
    Returns :
    the result of calling toString() method for a non-null argument and 
    "null" for a null argument
    
  2. String toString(Object o, String nullDefault) :此方法是上述方法的重载版本。如果第一个参数不为空,则返回对第一个参数调用 toString() 方法的结果,否则返回第二个参数。
    Syntax : 
    public static String toString(Object o, String nullDefault)
    Parameters : 
    o - an object
    nullDefault - string to return if the first argument is null
    Returns :
    the result of calling toString() method on the first argument if it is not null and
    the second argument otherwise.
    
    // Java program to demonstrate Objects.toString(Object o) 
    // and Objects.toString(Object o, String nullDefault) methods
      
    import java.util.Objects;
      
    class Pair 
    {
        public K key;
        public V value;
      
        public Pair(K key, V value) 
        {
            this.key = key;
            this.value = value;
        }
          
        @Override
        public String toString() {
            return "Pair {key = " + Objects.toString(key) + ", value = " + 
                        Objects.toString(value, "no value") + "}";
              
            /* without Objects.toString(Object o) and 
             Objects.toString(Object o, String nullDefault) method
             return "Pair {key = " + (key == null ? "null" : key.toString()) + 
         ", value = " + (value == null ? "no value" : value.toString()) + "}"; */
        }
    }
      
    class GFG
    {
        public static void main(String[] args) 
        {
            Pair p1 = 
                            new Pair("GFG", "geeksforgeeks.org");
            Pair p2 = new Pair("Code", null);
              
            System.out.println(p1);
            System.out.println(p2);
        }
    }
    

    输出:

    Pair {key = GFG, value = geeksforgeeks.org}
    Pair {key = Code, value = no value}
    
  3. boolean equals(Object a,Object b) :如果参数彼此相等,则此方法为 true,否则为 false。因此,如果两个参数都为 null,则返回 true,如果恰好一个参数为 null,则返回 false。否则,相等性由使用第一个参数的 equals() 方法确定。
    Syntax : 
    public static boolean equals(Object a,Object b)
    Parameters : 
    a - an object
    b - an object to be compared with a for equality
    Returns :
    true if the arguments are equal to each other and false otherwise
    
    // Java program to demonstrate equals(Object a, Object b) method
      
    import java.util.Objects;
      
    class Pair 
    {
        public K key;
        public V value;
      
        public Pair(K key, V value) 
        {
            this.key = key;
            this.value = value;
        }
      
        @Override
        public boolean equals(Object o)
        {
            if (!(o instanceof Pair)) {
                return false;
            }
            Pair p = (Pair) o;
            return Objects.equals(p.key, key) && Objects.equals(p.value, value);
              
        }
    }
      
    class GFG
    {
        public static void main(String[] args) 
        {
            Pair p1 = 
                    new Pair("GFG", "geeksforgeeks.org");
              
            Pair p2 = 
                    new Pair("GFG", "geeksforgeeks.org");
              
            Pair p3 = 
                    new Pair("GFG", "www.geeksforgeeks.org");
              
            System.out.println(p1.equals(p2));
            System.out.println(p2.equals(p3));
              
        }
    }
    

    输出:

    true
    false
    
  4. boolean deepEquals(Object a,Object b) :如果参数彼此深度相等,则此方法返回 true,否则返回 false。两个空值非常相等。如果两个参数都是数组,则使用 Arrays.deepEquals 中的算法来确定相等性。否则,相等性是通过使用第一个参数的 equals 方法来确定的。
    Syntax : 
    public static boolean deepEquals(Object a,Object b)
    Parameters : 
    a - an object
    b - an object to be compared with a for equality
    Returns :
    true if the arguments are deeply equals to each other and false otherwise
    
  5. T requireNonNull(T obj) :此方法检查指定的对象引用是否为空。此方法主要用于在方法和构造函数中进行参数验证,如下例所示:
    Syntax : 
    public static  T requireNonNull(T obj)
    Type Parameters:
    T - the type of the reference
    Parameters : 
    obj - the object reference to check for nullity
    Returns :
    obj if not null
    Throws:
    NullPointerException - if obj is null
    
  6. T requireNonNull(T obj,String message) :此方法是上述方法的重载版本,如果 obj 为 null,则自定义消息打印,如下例所示:
    Syntax : 
    public static  T requireNonNull(T obj,String message)
    Type Parameters:
    T - the type of the reference
    Parameters : 
    obj - the object reference to check for nullity
    message - detail message to be used in the event that a NullPointerException is thrown
    Returns :
    obj if not null
    Throws:
    NullPointerException - if obj is null
    
    // Java program to demonstrate Objects.requireNonNull(Object o) 
    // and Objects.requireNonNull(Object o, String message) methods
      
    import java.util.Objects;
      
    class Pair 
    {
        public K key;
        public V value;
      
        public Pair(K key, V value) 
        {
            this.key = key;
            this.value = value;
        }
      
        public void setKey(K key) {
            this.key = Objects.requireNonNull(key);
        }
          
        public void setValue(V value) {
            this.value = Objects.requireNonNull(value, "no value");
        }
    }
      
    class GFG
    {
        public static void main(String[] args) 
        {
            Pair p1 = 
                        new Pair("GFG", "geeksforgeeks.org");
              
            p1.setKey("Geeks");
              
            // below statement will throw NPE with customized message
            p1.setValue(null);
              
        }
    }
    

    输出:

    Exception in thread "main" java.lang.NullPointerException: no value
        at java.util.Objects.requireNonNull(Objects.java:228)
        at Pair.setValue(GFG.java:22)
        at GFG.main(GFG.java:36)
    
  7. int hashCode(Object o) :此方法返回非空参数的哈希码,空参数返回 0。
    Syntax : 
    public static int hashCode(Object o)
    Parameters : 
    o - an object
    Returns :
    the hash code of a non-null argument and 0 for a null argument
    
    // Java program to demonstrate Objects.hashCode(Object o) object
      
    import java.util.Objects;
      
    class Pair 
    {
        public K key;
        public V value;
      
        public Pair(K key, V value) 
        {
            this.key = key;
            this.value = value;
        }
      
        @Override
        public int hashCode()
        {
            return (Objects.hashCode(key) ^ Objects.hashCode(value));
              
            /* without Objects.hashCode(Object o) method
            return (key == null ? 0 : key.hashCode()) ^ 
            (value == null ? 0 : value.hashCode()); */
        }
    }
      
    class GFG
    {
        public static void main(String[] args) 
        {
            Pair p1 = 
                    new Pair("GFG", "geeksforgeeks.org");
            Pair p2 = 
                    new Pair("Code", null);
            Pair p3 = new Pair(null, null);
              
            System.out.println(p1.hashCode());
            System.out.println(p2.hashCode());
            System.out.println(p3.hashCode());
        }
    }
    

    输出:

    450903651
    2105869
    0
    
  8. int hash(Object... values) :此方法为一系列输入值生成哈希码。哈希码的生成就像所有输入值都放入一个数组中一样,并且该数组通过调用 Arrays.hashCode(Object[]) 进行了哈希处理。
    此方法对于在包含多个字段的对象上实现 Object.hashCode() 很有用。例如,如果一个对象具有三个字段 x、y 和 z,则可以这样写:
    @Override 
    public int hashCode() {
         return Objects.hash(x, y, z);
    }
    

    注意:当提供单个对象引用时,返回值不等于该对象引用的哈希码。这个值可以通过调用 hashCode(Object) 来计算。

    Syntax : 
    public static int hash(Object... values)
    Parameters : 
    values - the values to be hashed
    Returns :
    a hash value of the sequence of input values
    
    // Java program to demonstrate Objects.hashCode(Object o) object
      
    import java.util.Objects;
      
    class Pair 
    {
        public K key;
        public V value;
      
        public Pair(K key, V value) 
        {
            this.key = key;
            this.value = value;
        }
      
        @Override
        public int hashCode()
        {
            return (Objects.hash(key,value));
        }
    }
      
    class GFG
    {
        public static void main(String[] args) 
        {
            Pair p1 = 
                    new Pair("GFG", "geeksforgeeks.org");
            Pair p2 = 
                    new Pair("Code", null);
            Pair p3 = new Pair(null, null);
              
            System.out.println(p1.hashCode());
            System.out.println(p2.hashCode());
            System.out.println(p3.hashCode());
        }
    }
    

    输出:

    453150372
    65282900
    961
    
  9. int compare(T a,T b,Comparator c) :像往常一样,如果参数相同,则此方法返回 0,否则返回 c.compare(a, b)。因此,如果两个参数都为空,则返回 0。

    请注意,如果其中一个参数为 null,则可能会或可能不会抛出 NullPointerException,具体取决于比较器为 null 值选择的排序策略(如果有)。

    Syntax : 
    public static  int compare(T a,T b,Comparator c)
    Type Parameters:
    T - the type of the objects being compared
    Parameters : 
    a - an object
    b - an object to be compared with a
    c - the Comparator to compare the first two arguments
    Returns :
    0 if the arguments are identical and c.compare(a, b) otherwise.
    

注意:在Java 8 中,Objects 类还有 3 个方法。其中两个( isNull(Object o)nonNull(Object o) )用于检查引用。第三个是 requireNonNull 方法的一个重载版本。参考这里。