Skip to main content

Small Changes to Java 7 via Project Coin and Why They are Useful


Did you know how new features were added into Java 7? The following are functionalities that can be considered.
Source: [1]
Project Coin is all about the changes in the range from syntactic sugar to new language feature. This is what we're talking about today.

Since Java 7 is the first version developed in an open source manner, there is an amount of actions that must be performed for any changes as follows:
  • Update the Java Language Specification (JSL)
  • Implement a prototype in the source compiler
  • Add library support essential for the change
  • Write tests and examples
  • Update document
  • Etc, ...
Project Coin has submitted a lot of proposals (almost 70) but only some of them are chosen to Java 7. Why? Briefly, Java is a rich static type system and it has a lot of possible interaction points between different bits of it. Making changes to this type system is prone to creating unexpected surprises.

Wow! It is tough, right? Let's take a look what features Project Coin brought to Java 7.

Strings in switch statement

Question: Why do we need "switch"? (already supported by prior Java 7)
Answer: To avoid lots of ugly nested "ifs".
Question: Why do we need "string" in "switch"?
Answer: Just to make life in Java 7 a little bit easier. Agree?

Enhanced syntax for numeric literals

Underscores in numbers to improve readability.
E.g: 100_000_000 and 10_000_000 are much more readable than 100000000 and 10000000.

Improved exception handling

- Multicatch: it groups a family of exceptions into one catch statement; this feature can reduce code duplication.
- Final rethrow: it won't force to declare the exception signature. For example, my IDE complains of the block below with Java 6 compiler, but Java 7.

However, the issue here is the real dynamic type of the exception has been swallowed if we declare the exception signature.
And, the change in Java 7 is just simple as follows:

try {
  doSomethingWhichMightThrowIOException();
  doSomethingElseWhichMightThrowSQLException();
} catch (final Exception e) {
  //...
  throw e;
}

Why is final keyword useful? Because it provides a new semantics of catch and rethrow. The appearance of the final keyword indicates that the type that’s actually thrown is the runtime type of the exception that was encountered.

Note: If a catch block handles more than one exception type, then the catch parameter is implicitly final.

Try-with-resources

#Funfact: Virtually no one gets manual resource closing 100 percent right.
Therefore, using try-with-resources to eliminate unnecessary bugs from your codebase.

try(OutputStream out = new FileOutputStream(file);
InputStream is = url.openStream()){
 byte[] buf = new byte[4096];
 int len;
 while ((len = is.read(buf)) > 0) {
  out.write(buf, 0, len);
 }
}

Diamond syntax

To avoid the definition and setup of instances can be really verbose.
#Funfact: Why "diamond syntax" name? Because original name, ITIGIC (Improved Type Inference for Generic Instance Creation), is a very long(stupid) name and the shortened type information looks like a diamond.

Simplified varagrs method invocation

What is it? It just moves a warning about type information for a very specific case where varargs combines with generics in a method signature.

An admitted weaknesses of Java’s generics—you aren’t normally allowed to create an array of a known generic type. For example, this won't compile:

HashMap<String, String>[] arrayHm = new HashMap<>[2];

So when it runs into this circumstance, the compiler cheats and breaks its own rule about the forbidden array of generic type. It throws the warning "unchecked" which is darkly meaning. Oops! Then, dummy developers want to know why their methods are "unchecked"? They need an explanation.

To make things easier for developers and by annotating the method with "@SafeVarargs", the developer essentially asserts that method doesn't perform any unsafe operations. Known issue! ;)

Reference:



[1]. Benjamin J. Evans and Martijn Verburg, “The Well-Grounded Java Developer: Vital techniques of Java 7 and polyglot programming"

Comments

Popular posts from this blog

Styling Sort Icons Using Font Awesome for Primefaces' Data Table

So far, Primefaces has used image sprites for displaying the sort icons. This leads to a problem if we want to make a different style for these icons; for example, I would make the icon "arrow up" more blurry at the first time the table loading because I want to highlight the icon "arrow down". I found a way that I can replace these icons with Font Awesome icons. We will use "CSS Pseudo-classes" to achieve it. The hardest thing here is that we should handle displaying icons in different cases. There is a case both "arrow up" and "arrow down" showing and other case is only one of these icons is shown. .ui-sortable-column-icon.ui-icon.ui-icon-carat-2-n-s { background-image: none; margin-left: 5px; font-size: 1.1666em; position: relative; } .ui-sortable-column-icon.ui-icon.ui-icon-carat-2-n-s:not(.ui-icon-triangle-1-s)::before { content: "\f106"; font-family: "FontAwesome"; position: ...

Java Core - Top 10 Questions Every Developer Should Know

#RandomlyPickedByMe What is the difference between Javascript and Java? Difference between StringBuilder and StringBuffer? Why do I get "SomeType@a3fde" when I print my code? Why is String immutable? Why "equals" method when we have "==" operator? Is List<Dog> a subclass of List<Animal>? Why shouldn't we use raw type? Is Java “pass-by-reference” or “pass-by-value”? What's the advantage of a Java enum versus a class with public static final fields? Why "double x = 0.1 + 0.2" and result of print(x) is 0.30000000000000004? 1. What is the difference between Javascript and Java? Holy crap! (Vietnamese: Thế quái nào lại có câu hỏi ngớ ngẩn vậy chứ?) "Java and Javascript are similar like Car and Carpet are similar." - Greg Hewgill (on StackOverflow) 2. Difference between StringBuilder and StringBuffer String is immutable. StringBuilder and StringBuffer are mutable. StringBuffer is thread-safe. String...

Math fundamentals and Katex

It was really tough for me to understand many articles about data science due to the requirements of understanding mathematics (especially linear algebra). I’ve started to gain some basic knowledges about Math by reading a book first. The great tool Typora and stackedit with supporting Katex syntax simply helps me to display Math-related symbols. Let’s start! The fundamental ideas of mathematics: “doing math” with numbers and functions. Linear algebra: “doing math” with vectors and linear transformations. 1. Solving equations Solving equations means finding the value of the unknown in the equation. To find the solution, we must break the problem down into simpler steps. E.g: x 2 − 4 = 4 5 x 2 − 4 + 4 = 4 5 + 4 x 2 = 4 9 x = 4 9 ∣ x ∣ = 7 x = 7  or  x = − 7 \begin{aligned} x^2 - 4 &= 45\\ x^2 - 4 + 4 &= 45 + 4\\ x^2 &= 49\\ \sqrt{x}&=\sqrt{49}\\ |x| &= 7\\ x=7 &\text{ or } x=-7 \end{aligned} x 2 − 4 x 2 − 4 + 4 x 2 x ​ ∣ x ∣ x = 7 ​ = 4 5 = 4 ...

My must-have apps for daily work

There is no doubt that cool apps can help us be more productive and enjoyable at work. For the time being, I really love the following apps which are used by me almost every day. 1. A personal Kanban In fact, a personal kanban is the most useful app for me. Why does it matter? It is not just a to-do list, but it keeps me motivated every day because it helps me be able to know what my "big picture" is. I usually set up my plans together with a path to reach them.  KanbanFlow  is my preferred tool. KanbanFlow 2. A terminal Needless to say, a terminal is a must-have app for every developer, especially the ones use macOS/Linux. Due to its importance, I love to decorate and enhance it to be super exciting with various tools such as  iTerm ,  oh-my- zsh , and  thefuck . ;) iTerm + oh-my-zsh 3. A documentation "ecosystem" As a developer, I can not remember all things that I have experimented a day. Moreover, a document is really useful for sharing an...

Regex - Check a text without special characters but German, French

Special characters such as square brackets ([ ]) can cause an exception " java.util.regex.PatternSyntaxException " or something like this if we don't handle them correctly. I had met this issue. In my case, my customers want our application should allow some characters in German and French even not allow some special characters. The solution is that we limit the allowed characters by showing the validation message on GUI. For an instance, the message looks like the following: "This field can't contain any special characters; only letters, numbers, underscores (_), spaces and single quotes (') are allowed." I used Regular Expression to check it. For entering Germany and French, I actually don't have this type of keyboard, so I referred these sites: * German characters: http://german.typeit.org/ * French characters: http://french.typeit.org/ Here is my code: package vn.nvanhuong.practice; import java.util.regex.Matcher; import java.util...