public final class Version extends Object implements Comparable<Version>
$VNUM
, is a non-empty sequence of
non-negative integer numerals, without leading or trailing zeroes,
separated by period characters (U+002E); i.e., it matches the regular
expression ^[1-9][0-9]*(((\.0)*\.[1-9][0-9]*)*)*$
. The sequence may
be of arbitrary length but the first three elements are assigned specific
meanings, as follows:
$MAJOR.$MINOR.$SECURITY
$MAJOR
--- The major version number,
incremented for a major release that contains significant new features as
specified in a new edition of the Java SE Platform Specification,
e.g., JSR 337
for Java SE 8. Features may be removed in a major release, given
advance notice at least one major release ahead of time, and incompatible
changes may be made when justified. The $MAJOR
version number of
JDK 8 was 8
; the $MAJOR
version number of JDK 9
is 9
.
$MINOR
--- The minor version number,
incremented for a minor update release that may contain compatible bug
fixes, revisions to standard APIs mandated by a Maintenance Release of
the relevant Platform Specification, and implementation features outside
the scope of that Specification such as new JDK-specific APIs, additional
service providers, new garbage collectors, and ports to new hardware
architectures. $MINOR
is reset to zero when $MAJOR
is
incremented.
$SECURITY
--- The security level,
incremented for a security-update release that contains critical fixes
including those necessary to improve security. $SECURITY
is reset
to zero only when $MAJOR
is incremented. A higher
value of $SECURITY
for a given $MAJOR
value, therefore,
always indicates a more secure release, regardless of the value of
$MINOR
.
The fourth and later elements of a version number are free for use by downstream consumers of the JDK code base. Such a consumer may, e.g., use the fourth element to identify patch releases which contain a small number of critical non-security fixes in addition to the security fixes in the corresponding security release.
The version number does not include trailing zero elements;
i.e., $SECURITY
is omitted if it has the value zero, and
$MINOR
is omitted if both $MINOR
and $SECURITY
have
the value zero.
The sequence of numerals in a version number is compared to another
such sequence in numerical, pointwise fashion; e.g., 9.9.1
is less than 9.10.0
. If one sequence is shorter than another then
the missing elements of the shorter sequence are considered to be zero;
e.g., 9.1.2
is equal to 9.1.2.0
but less than
9.1.2.1
.
A version string $VSTR
consists of a version number
$VNUM
, as described above, optionally followed by pre-release and
build information, in the format
$VNUM(-$PRE)?(\+($BUILD)?(-$OPT)?)?
where:
$PRE
, matching ([a-zA-Z0-9]+)
---
A pre-release identifier. Typically ea
, for an early-access
release that's under active development and potentially unstable, or
internal
, for an internal developer build.
$BUILD
, matching
(0|[1-9][0-9]*)
--- The build number, incremented for each promoted build.
$BUILD
is reset to 1
when any portion of $VNUM
is
incremented.
$OPT
, matching ([-a-zA-Z0-9\.]+)
--- Additional build information, if desired. In the case of an
internal
build this will often contain the date and time of the
build.
When comparing two version strings the value of $OPT
, if
present, may or may not be significant depending on the chosen comparison
method. The comparison methods compareTo()
and
compareToIgnoreOpt{}
should be used
consistently with the corresponding methods equals()
and equalsIgnoreOpt()
.
A short version string ($SVSTR
), often useful in less
formal contexts, is simply $VNUM
optionally ended with
-$PRE
.
Modifier and Type | Method and Description |
---|---|
Optional<Integer> |
build()
Returns the build number.
|
int |
compareTo(Version ob)
Compares this version to another.
|
int |
compareToIgnoreOpt(Version ob)
Compares this version to another disregarding optional build
information.
|
static Version |
current()
Returns
System.getProperty("java.version") as a Version. |
boolean |
equals(Object ob)
Determines whether this
Version is equal to another object. |
boolean |
equalsIgnoreOpt(Object ob)
Determines whether this
Version is equal to another
disregarding optional build information. |
int |
hashCode()
Returns the hash code of this version.
|
int |
major()
Returns the major version number.
|
int |
minor()
Returns the minor version number or zero if it was
not set.
|
Optional<String> |
optional()
Returns optional additional identifying build
information.
|
static Version |
parse(String s)
Parses the given string as a valid JDK version string containing a version number followed by pre-release and
build information.
|
Optional<String> |
pre()
Returns the optional pre-release information.
|
int |
security()
Returns the security version number or zero if
it was not set.
|
String |
toString()
Returns a string representation of this version.
|
List<Integer> |
version()
Returns an unmodifiable
List of the
integer numerals contained in the version
number. |
public static Version parse(String s)
s
- A string to interpret as a versionIllegalArgumentException
- If the given string cannot be interpreted a valid versionNullPointerException
- If the given string is null
NumberFormatException
- If an element of the version number or the build number cannot
be represented as an Integer
public static Version current()
System.getProperty("java.version")
as a Version.System.getProperty("java.version")
as a VersionSecurityException
- If a security manager exists and its checkPropertyAccess
method does not allow access to the
system property "java.version"public int major()
public int minor()
public int security()
public List<Integer> version()
List
of the
integer numerals contained in the version
number. The List
always contains at least one
element corresponding to the major version
number.public Optional<String> pre()
public Optional<Integer> build()
public Optional<String> optional()
public int compareTo(Version ob)
Each of the components in the version is compared in the follow order of precedence: version numbers, pre-release identifiers, build numbers, optional build information.
Comparison begins by examining the sequence of version numbers. If one sequence is shorter than another, then the missing elements of the shorter sequence are considered to be zero.
A version with a pre-release identifier is always considered to be less than a version without one. Pre-release identifiers are compared numerically when they consist only of digits, and lexicographically otherwise. Numeric identifiers are considered to be less than non-numeric identifiers.
A version without a build number is always less than one with a build number; otherwise build numbers are compared numerically.
The optional build information is compared lexicographically. During this comparison, a version with optional build information is considered to be greater than a version without one.
A version is not comparable to any other type of object.
compareTo
in interface Comparable<Version>
ob
- The object to be comparedVersion
is less than, equal to, or greater than the
given Version
NullPointerException
- If the given object is null
public int compareToIgnoreOpt(Version ob)
Two versions are compared by examining the version string as
described in compareTo(Version)
with the exception that the
optional build information is always ignored.
A version is not comparable to any other type of object.
ob
- The object to be comparedVersion
is less than, equal to, or greater than the
given Version
NullPointerException
- If the given object is null
public String toString()
public boolean equals(Object ob)
Version
is equal to another object.
Two Version
s are equal if and only if they represent the
same version string.
This method satisfies the general contract of the Object.equals
method.
equals
in class Object
ob
- The object to which this Version
is to be comparedtrue
if, and only if, the given object is a
Version
that is identical to this Version
Object.hashCode()
,
HashMap
public boolean equalsIgnoreOpt(Object ob)
Version
is equal to another
disregarding optional build information.
Two Version
s are equal if and only if they represent the
same version string disregarding the optional build information.
ob
- The object to which this Version
is to be comparedtrue
if, and only if, the given object is a
Version
that is identical to this Version
ignoring the optinal build informationpublic int hashCode()
This method satisfies the general contract of the Object.hashCode
method.
hashCode
in class Object
Object.equals(java.lang.Object)
,
System.identityHashCode(java.lang.Object)
Copyright © 2005, 2016, Oracle and/or its affiliates. All rights reserved.
DRAFT 9-internal+0-2016-02-02-132811.iclark.api