I had one experience in java6 to java7 migration. The issue was a partly overriding of a list implementation. That list implementation was used in a for loop. The way the for loop was iterated across over was different in the two java versions.
e.g.
for(Object a:list){
a.doSomething();
}
In java6 it was equivalent to
for (int i:i<list.length();i++){
list.get(i).soSomething();
}
In java7 it was done like this
Iterator iter = list.iterator();
while(iter.hasNext() {
iter.next().doSomething();
}
The original programmer had overridden the get method but not the next method in the iterator method. (Actually just called toLowerCase on a list of strings).
Oracle did nothing wrong, the programmer only partly overriding the list implementation was broken. This kind of programmer error is too common and is normally the reasons that upgrades become an issue, i.e. its the equivalent of using undefined behaviour in C and then scream when your compiler upgrade burns down your house.
Ah, this is why I never see these kind of issues. He subclassed a list just to modify the list to return lowercased output always, preventing any method of ever accessing the original multi case text.
At any rate, all of the java 6/7 code I've ever had has ported to java 8 without any changes. Assumed it was the normal experience.
In my case in 500,000 lines of code or so it was the only example. Nothing like the stuff I found in a different job going from 4 to 5! The enum keyword was painful! and then we found class names in the database instantiated at runtime with reflection once the migration was "finished". Some programmers are mean to those who come after.
e.g.
In java6 it was equivalent to In java7 it was done like this The original programmer had overridden the get method but not the next method in the iterator method. (Actually just called toLowerCase on a list of strings).Oracle did nothing wrong, the programmer only partly overriding the list implementation was broken. This kind of programmer error is too common and is normally the reasons that upgrades become an issue, i.e. its the equivalent of using undefined behaviour in C and then scream when your compiler upgrade burns down your house.