View Javadoc
1   /*
2    *  Licensed to the Apache Software Foundation (ASF) under one or more
3    *  contributor license agreements.  See the NOTICE file distributed with
4    *  this work for additional information regarding copyright ownership.
5    *  The ASF licenses this file to You under the Apache License, Version 2.0
6    *  (the "License"); you may not use this file except in compliance with
7    *  the License.  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   *  Unless required by applicable law or agreed to in writing, software
12   *  distributed under the License is distributed on an "AS IS" BASIS,
13   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   *  See the License for the specific language governing permissions and
15   *  limitations under the License.
16   */
17  package org.apache.commons.compress.harmony.unpack200.bytecode;
18  
19  import java.util.Objects;
20  
21  /**
22   * Abstract superclass for constant pool constant entries such as numbers or Strings
23   */
24  public abstract class CPConstant extends ConstantPoolEntry {
25  
26      private final Object value;
27  
28      /**
29       * Constructs a new CPConstant.
30       *
31       * @param tag         TODO
32       * @param value       TODO
33       * @param globalIndex index in CpBands
34       * @throws NullPointerException if value is null
35       */
36      public CPConstant(final byte tag, final Object value, final int globalIndex) {
37          super(tag, globalIndex);
38          this.value = Objects.requireNonNull(value, "value");
39      }
40  
41      @Override
42      public boolean equals(final Object obj) {
43          if (this == obj) {
44              return true;
45          }
46          if (obj == null) {
47              return false;
48          }
49          if (this.getClass() != obj.getClass()) {
50              return false;
51          }
52          final CPConstant other = (CPConstant) obj;
53          return Objects.equals(value, other.value);
54      }
55  
56      protected Object getValue() {
57          return value;
58      }
59  
60      @Override
61      public int hashCode() {
62          return Objects.hash(value);
63      }
64  }