/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.lang3;
import org.apache.commons.lang3.math.NumberUtils;
An enum representing all the versions of the Java specification.
This is intended to mirror available values from the
java.specification.version System property.
Since: 3.0
/**
* <p>An enum representing all the versions of the Java specification.
* This is intended to mirror available values from the
* <em>java.specification.version</em> System property. </p>
*
* @since 3.0
*/
public enum JavaVersion {
The Java version reported by Android. This is not an official Java version number.
/**
* The Java version reported by Android. This is not an official Java version number.
*/
JAVA_0_9(1.5f, "0.9"),
Java 1.1.
/**
* Java 1.1.
*/
JAVA_1_1(1.1f, "1.1"),
Java 1.2.
/**
* Java 1.2.
*/
JAVA_1_2(1.2f, "1.2"),
Java 1.3.
/**
* Java 1.3.
*/
JAVA_1_3(1.3f, "1.3"),
Java 1.4.
/**
* Java 1.4.
*/
JAVA_1_4(1.4f, "1.4"),
Java 1.5.
/**
* Java 1.5.
*/
JAVA_1_5(1.5f, "1.5"),
Java 1.6.
/**
* Java 1.6.
*/
JAVA_1_6(1.6f, "1.6"),
Java 1.7.
/**
* Java 1.7.
*/
JAVA_1_7(1.7f, "1.7"),
Java 1.8.
/**
* Java 1.8.
*/
JAVA_1_8(1.8f, "1.8"),
Java 1.9.
Deprecated: As of release 3.5, replaced by JAVA_9
/**
* Java 1.9.
*
* @deprecated As of release 3.5, replaced by {@link #JAVA_9}
*/
@Deprecated
JAVA_1_9(9.0f, "9"),
Java 9
Since: 3.5
/**
* Java 9
*
* @since 3.5
*/
JAVA_9(9.0f, "9"),
Java 10
Since: 3.7
/**
* Java 10
*
* @since 3.7
*/
JAVA_10(10.0f, "10"),
The most recent java version. Mainly introduced to avoid to break when a new version of Java is used.
/**
* The most recent java version. Mainly introduced to avoid to break when a new version of Java is used.
*/
JAVA_RECENT(maxVersion(), Float.toString(maxVersion()));
The float value.
/**
* The float value.
*/
private final float value;
The standard name.
/**
* The standard name.
*/
private final String name;
Constructor.
Params: - value – the float value
- name – the standard name, not null
/**
* Constructor.
*
* @param value the float value
* @param name the standard name, not null
*/
JavaVersion(final float value, final String name) {
this.value = value;
this.name = name;
}
//-----------------------------------------------------------------------
Whether this version of Java is at least the version of Java passed in.
For example:
myVersion.atLeast(JavaVersion.JAVA_1_4)
Params: - requiredVersion – the version to check against, not null
Returns: true if this version is equal to or greater than the specified version
/**
* <p>Whether this version of Java is at least the version of Java passed in.</p>
*
* <p>For example:<br>
* {@code myVersion.atLeast(JavaVersion.JAVA_1_4)}<p>
*
* @param requiredVersion the version to check against, not null
* @return true if this version is equal to or greater than the specified version
*/
public boolean atLeast(final JavaVersion requiredVersion) {
return this.value >= requiredVersion.value;
}
Transforms the given string with a Java version number to the
corresponding constant of this enumeration class. This method is used
internally.
Params: - nom – the Java version as string
Returns: the corresponding enumeration constant or null if the
version is unknown
/**
* Transforms the given string with a Java version number to the
* corresponding constant of this enumeration class. This method is used
* internally.
*
* @param nom the Java version as string
* @return the corresponding enumeration constant or <b>null</b> if the
* version is unknown
*/
// helper for static importing
static JavaVersion getJavaVersion(final String nom) {
return get(nom);
}
Transforms the given string with a Java version number to the
corresponding constant of this enumeration class. This method is used
internally.
Params: - nom – the Java version as string
Returns: the corresponding enumeration constant or null if the
version is unknown
/**
* Transforms the given string with a Java version number to the
* corresponding constant of this enumeration class. This method is used
* internally.
*
* @param nom the Java version as string
* @return the corresponding enumeration constant or <b>null</b> if the
* version is unknown
*/
static JavaVersion get(final String nom) {
if ("0.9".equals(nom)) {
return JAVA_0_9;
} else if ("1.1".equals(nom)) {
return JAVA_1_1;
} else if ("1.2".equals(nom)) {
return JAVA_1_2;
} else if ("1.3".equals(nom)) {
return JAVA_1_3;
} else if ("1.4".equals(nom)) {
return JAVA_1_4;
} else if ("1.5".equals(nom)) {
return JAVA_1_5;
} else if ("1.6".equals(nom)) {
return JAVA_1_6;
} else if ("1.7".equals(nom)) {
return JAVA_1_7;
} else if ("1.8".equals(nom)) {
return JAVA_1_8;
} else if ("9".equals(nom)) {
return JAVA_9;
} else if ("10".equals(nom)) {
return JAVA_10;
}
if (nom == null) {
return null;
}
final float v = toFloatVersion(nom);
if ((v - 1.) < 1.) { // then we need to check decimals > .9
final int firstComma = Math.max(nom.indexOf('.'), nom.indexOf(','));
final int end = Math.max(nom.length(), nom.indexOf(',', firstComma));
if (Float.parseFloat(nom.substring(firstComma + 1, end)) > .9f) {
return JAVA_RECENT;
}
}
return null;
}
//-----------------------------------------------------------------------
The string value is overridden to return the standard name.
For example, "1.5"
.
Returns: the name, not null
/**
* <p>The string value is overridden to return the standard name.</p>
*
* <p>For example, <code>"1.5"</code>.</p>
*
* @return the name, not null
*/
@Override
public String toString() {
return name;
}
Gets the Java Version from the system or 99.0 if the java.specification.version
system property is not set. Returns: the value of java.specification.version
system property or 99.0 if it is not set.
/**
* Gets the Java Version from the system or 99.0 if the {@code java.specification.version} system property is not set.
*
* @return the value of {@code java.specification.version} system property or 99.0 if it is not set.
*/
private static float maxVersion() {
final float v = toFloatVersion(System.getProperty("java.specification.version", "99.0"));
if (v > 0) {
return v;
}
return 99f;
}
Parses a float value from a String.
Params: - value – the String to parse.
Returns: the float value represented by the string or -1 if the given String can not be parsed.
/**
* Parses a float value from a String.
*
* @param value the String to parse.
* @return the float value represented by the string or -1 if the given String can not be parsed.
*/
private static float toFloatVersion(final String value) {
final int defaultReturnValue = -1;
if (value.contains(".")) {
final String[] toParse = value.split("\\.");
if (toParse.length >= 2) {
return NumberUtils.toFloat(toParse[0] + '.' + toParse[1], defaultReturnValue);
}
} else {
return NumberUtils.toFloat(value, defaultReturnValue);
}
return defaultReturnValue;
}
}