开源项目

相关文章

更多

最近更新

更多

Guava Objects类详解

2019-04-23 23:03|来源: 网路

Objects类提供适用于所有对象,如equals, hashCode等辅助函数

类声明

以下是com.google.common.base.Objects类的声明:

@GwtCompatible
public final class Objects
   extends Object

类方法

S.N. 方法及说明
1 static boolean equal(Object a, Object b)
确定两个可能是空的对象是否相等。
2 static <T> T firstNonNull(T first, T second)
不推荐使用。使用MoreObjects.firstNonNull(T,T)来代替。定于2016年6月去除该方法。
3 static int hashCode(Object... objects)
生成多个值的哈希码。
4 static Objects.ToStringHelper toStringHelper(Class<?> clazz)
不推荐使用。使用MoreObjects.toStringHelper(Class)来代替。定于2016年6月去除该方法。
5 static Objects.ToStringHelper toStringHelper(Object self)
不推荐使用。使用MoreObjects.toStringHelper(Object)来代替。定于2016年6月去除该方法。
6 static Objects.ToStringHelper toStringHelper(String className)
不推荐使用。使用MoreObjects.toStringHelper(String)来代替。定于2016年6月去除该方法。

方法继承

这个类从以下类继承的方法:

  • java.lang.Object

Objects 示例

使用所选择的编辑器,创建下面的java程序比如 C:/> Guava

GuavaTester.java

import com.google.common.base.Objects;

public class GuavaTester {
   public static void main(String args[]){
      Student s1 = new Student("Mahesh", "Parashar", 1, "VI");	
      Student s2 = new Student("Suresh", null, 3, null);	
	  
      System.out.println(s1.equals(s2));
      System.out.println(s1.hashCode());	
      System.out.println(
      Objects.toStringHelper(s1)
         .add("Name",s1.getFirstName()+" " + s1.getLastName())
         .add("Class", s1.getClassName())
         .add("Roll No", s1.getRollNo())
         .toString());
   }
}

class Student {
   private String firstName;
   private String lastName;
   private int rollNo;
   private String className;

   public Student(String firstName, String lastName, int rollNo, String className){
      this.firstName = firstName;
      this.lastName = lastName;
      this.rollNo = rollNo;
      this.className = className;		
   }

   @Override
   public boolean equals(Object object){
      if(!(object instanceof Student) || object == null){
         return false;
      }
      Student student = (Student)object;
      // no need to handle null here		
      // Objects.equal("test", "test") == true
      // Objects.equal("test", null) == false
      // Objects.equal(null, "test") == false
      // Objects.equal(null, null) == true		
      return Objects.equal(firstName, student.firstName) // first name can be null
         && Objects.equal(lastName, student.lastName) // last name can be null
         && Objects.equal(rollNo, student.rollNo)	
         && Objects.equal(className, student.className);// class name can be null
   }

   @Override
   public int hashCode(){
      //no need to compute hashCode by self
      return Objects.hashCode(className,rollNo);
   }
   public String getFirstName() {
      return firstName;
   }
   public void setFirstName(String firstName) {
      this.firstName = firstName;
   }
   public String getLastName() {
      return lastName;
   }
   public void setLastName(String lastName) {
      this.lastName = lastName;
   }
   public int getRollNo() {
      return rollNo;
   }
   public void setRollNo(int rollNo) {
      this.rollNo = rollNo;
   }
   public String getClassName() {
      return className;
   }
   public void setClassName(String className) {
      this.className = className;
   }
}

验证结果

使用javac编译器编译如下类

C:\Guava>javac GuavaTester.java

现在运行GuavaTester看到的结果

C:\Guava>java GuavaTester

看到结果。

false
85871
Student{Name=Mahesh Parashar, Class=VI, Roll No=1}


相关问答

更多

Guava MultiMap和ConcurrentModificationException(Guava MultiMap and ConcurrentModificationException [duplicate])

在java8中,你也可以使用lambda方法: eventMultiMap.entries().removeIf(genericEventCommandEntry -> genericEventCommandEntry.getValue().equals(command)); In java8 you can also use a lambda approach: eventMultiMap.entries().removeIf(genericEventCommandEntry -> generi ...

使用Guava将Map转换为对象?(Transform Map to object using Guava?)

你可以用番石榴做的最接近的事情是 Collection<MyEntry> myEntries = Collections2.transform(map.entrySet(), function); 这只是map的entrySet上的常规转换,而function的类型为Function<Map.Entry<String, String>, MyEntry> 。 番石榴不能提供Sets.transform由于各种原因 - 它不能保证函数是单射的,它没有与函数相反的等等。如果你需要一个Set ,那么你 ...

为什么Guava不为小的ImmutableLists使用专门的类?(Why does Guava not use specialized classes for small ImmutableLists?)

你能帮我理解这里涉及的权衡吗? 这是一个权衡: 性能 - 不分配临时数组可以节省成本。 但是,人们需要进行一些广泛的代码分析和基准测试来量化这种节省。 (我怀疑在大多数应用程序中它都是微不足道的。请阅读@Voo提供的这个链接 !) 可读性 - 拥有一堆额外的重载会使javadoc混乱。 可维护性 - 有一堆重载是以不需要临时对象的方式实现的,这需要大量的复制/粘贴编程,这使得将来的代码维护更加困难。 实用程序 - 这些重载的使用频率是多少? 我希望答案“很少”。 字节码占用空间 - 这些额外的重载 ...

使用Google Guava的Objects.ToStringHelper(Using Google Guava's Objects.ToStringHelper)

Guava的com.google.common.base.MoreObjects.toStringHelper()有一个小技巧。 在自动生成toString()方法时,我配置了IntelliJ IDEA来使用它。 我假设你可以在Eclipse中做同样的事情。 在Intellij中如何做到这一点 : 去上课 按Alt + Insert弹出“生成”菜单 选择toString() 点击“设置”按钮 转到“模板”选项卡 创建一个名为“Guava's MoreObjects.toStringHelper() ...

是否有可能将Guava的ForwardingListIterator和PeekingIterator结合起来?(Is it possible to combine Guava's ForwardingListIterator with a PeekingIterator?)

将一个新的“窥视”概念引入到一个已经很容易在两个方向上滚动的迭代器的价值在哪里? 如果你真的想要它,你可以实现两个简单的静态助手: public static <T> T peekNext(ListIterator<T> iterator) { T next = iterator.next(); iterator.previous(); return next; } public static <T> T peekPrevious(ListIterator<T> iterator) ...

番石榴的IntervalTree(IntervalTree in Guava)

Guava没有提供这个,尽管你可以通过找到给定点之前和之后的第一个范围来在RangeSet之上构建这样的东西。 但一般来说,除了类型的比较排序之外,Guava Range对距离,度量或任何其他内容一无所知 。 他们不知道10比15更接近11 。 Guava doesn't provide this, though you might be able to build such a thing on top of a RangeSet by finding the first range befor ...

Guava ValueGraph的简单示例(Simple example of Guava ValueGraph)

Guava wiki提供了以下使用ValueGraph示例: MutableValueGraph<Integer, Double> weightedGraph = ValueGraphBuilder.directed().build(); weightedGraph.addNode(1); weightedGraph.putEdgeValue(2, 3, 1.5); // also adds nodes 2 and 3 if not already present weightedGraph.p ...

不兼容的库版本selenium / guava(Incompatible library version selenium / guava)

因为你对com.google.guava:guava:23.3 org.seleniumhq.selenium:selenium-java:3.0.1依赖性com.google.guava:guava:23.3使用org.seleniumhq.selenium:selenium-java:3.0.1可能会让你在十字路口。 但是Selenium发行说明清楚地提到了以下番石榴依赖性: Selenium v2.49.0 :Bump guava到19版 Selenium v3.1.0 :需要更新最新的番石 ...

将Guava Range与自定义对象一起使用(Use Guava Range with custom object)

如果您阅读Range的javadoc: 请注意,无法迭代这些包含的值。 为此,请将此范围实例和相应的DiscreteDomain传递给ContiguousSet.create(com.google.common.collect.Range<C>, com.google.common.collect.DiscreteDomain<C>) 。 所以你的方法是正确的,除了你需要为自定义对象创建一个自定义DiscreteDomain : public class CustomDiscreteDomain ...

使用guava AbstractScheduledService(Using guava AbstractScheduledService)

AbstractScheduledServiced实现Service 。 Service接口描述了生命周期方法,包括startAsync 。 ServiceState枚举文字包含有关其含义的文档。 处于NEW状态的服务(刚刚创建): 处于此状态的服务处于非活动状态。 它做的工作量极少,占用资源极少。 要使服务执行某些有用的操作,您必须将其转换为RUNNING状态 此状态下的服务正在运行。 这就是为什么你必须在它做任何事之前启动服务的原因。 我还建议不要从构造函数中调用startAsync,而是从创 ...