Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #26734 > unrolled thread
| Started by | Y HA <yuriha@gmail.com> |
|---|---|
| First post | 2013-12-05 14:42 -0800 |
| Last post | 2013-12-11 00:55 -0500 |
| Articles | 20 on this page of 33 — 15 participants |
Back to article view | Back to comp.lang.java.programmer
@override annotation not working correctly javac version _ 1.7.0_25 Y HA <yuriha@gmail.com> - 2013-12-05 14:42 -0800
Re: @override annotation not working correctly javac version _ 1.7.0_25 Eric Sosman <esosman@comcast-dot-net.invalid> - 2013-12-05 18:25 -0500
Re: @override annotation not working correctly javac version _ 1.7.0_25 Y HA <yuriha@gmail.com> - 2013-12-05 16:13 -0800
Re: @override annotation not working correctly javac version _ 1.7.0_25 Y HA <yuriha@gmail.com> - 2013-12-05 17:00 -0800
Re: @override annotation not working correctly javac version _ 1.7.0_25 Y HA <yuriha@gmail.com> - 2013-12-05 17:03 -0800
Re: @override annotation not working correctly javac version _ 1.7.0_25 Eric Sosman <esosman@comcast-dot-net.invalid> - 2013-12-05 20:42 -0500
Re: @override annotation not working correctly javac version _ 1.7.0_25 Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2013-12-07 19:15 +0000
Re: @override annotation not working correctly javac version _ 1.7.0_25 "John B. Matthews" <nospam@nospam.invalid> - 2013-12-05 21:49 -0500
Use of @Override when implementing interfaces (was: @override annotation not working...) Fredrik Jonson <fredrik@jonson.org> - 2013-12-06 07:01 +0000
Re: Use of @Override when implementing interfaces Silvio <silvio@internet.com> - 2013-12-06 09:10 +0100
Re: Use of @Override when implementing interfaces Y HA <yuriha@gmail.com> - 2013-12-06 07:08 -0800
another error with @Override with another code Y HA <yuriha@gmail.com> - 2013-12-06 07:25 -0800
Re: another error with @Override with another code "John B. Matthews" <nospam@nospam.invalid> - 2013-12-06 11:29 -0500
Re: another error with @Override with another code Y HA <yuriha@gmail.com> - 2013-12-06 09:21 -0800
Re: another error with @Override with another code "John B. Matthews" <nospam@nospam.invalid> - 2013-12-07 00:26 -0500
Re: another error with @Override with another code Knute Johnson <september@knutejohnson.com> - 2013-12-06 21:57 -0800
Re: another error with @Override with another code Eric Sosman <esosman@comcast-dot-net.invalid> - 2013-12-07 08:44 -0500
Re: another error with @Override with another code "Chris Uppal" <chris.uppal@metagnostic.REMOVE-THIS.org> - 2013-12-07 11:12 +0000
Re: Use of @Override when implementing interfaces Stanimir Stamenkov <s7an10@netscape.net> - 2013-12-07 16:32 +0200
Re: Use of @Override when implementing interfaces Y HA <yuriha@gmail.com> - 2013-12-08 12:02 -0800
Re: Use of @Override when implementing interfaces Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2013-12-08 21:27 +0000
Re: Use of @Override when implementing interfaces Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2013-12-08 23:43 +0000
Re: Use of @Override when implementing interfaces Eric Sosman <esosman@comcast-dot-net.invalid> - 2013-12-08 16:45 -0500
Re: Use of @Override when implementing interfaces Jeff Higgins <jeff@invalid.invalid> - 2013-12-06 09:51 -0500
Re: Use of @Override when implementing interfaces leif.roar@invalid.com (Leif Roar Moldskred) - 2013-12-06 09:36 -0600
Re: Use of @Override when implementing interfaces Y HA <yuriha@gmail.com> - 2013-12-06 07:41 -0800
Re: Use of @Override when implementing interfaces markspace <markspace@nospam.nospam> - 2013-12-06 08:18 -0800
Re: Use of @Override when implementing interfaces v_borchert@despammed.com (Volker Borchert) - 2013-12-07 07:14 +0000
Re: Use of @Override when implementing interfaces Wayne <nospam@all.invalid> - 2013-12-07 04:46 -0500
Re: Use of @Override when implementing interfaces v_borchert@despammed.com (Volker Borchert) - 2013-12-07 10:54 +0000
Re: Use of @Override when implementing interfaces Fredrik Jonson <fredrik@jonson.org> - 2013-12-09 12:59 +0000
Re: Use of @Override when implementing interfaces Arne Vajhøj <arne@vajhoej.dk> - 2013-12-09 21:06 -0500
Re: Use of @Override when implementing interfaces "John B. Matthews" <nospam@nospam.invalid> - 2013-12-11 00:55 -0500
Page 1 of 2 [1] 2 Next page →
| From | Y HA <yuriha@gmail.com> |
|---|---|
| Date | 2013-12-05 14:42 -0800 |
| Subject | @override annotation not working correctly javac version _ 1.7.0_25 |
| Message-ID | <d0685bbc-5d5d-47d0-a264-e79debf00b3d@googlegroups.com> |
Hi!
This code should output:
Run method overridden in Task class
overridden method run() in PeriodicTask class
but I'm having this :
# javac -version
javac 1.7.0_25
# javac CollectionTest.java
CollectionTest.java:18: error: incompatible types
@Override
^
required: Annotation
found: Override
CollectionTest.java:27: error: incompatible types
@Override
^
required: Annotation
found: Override
2 errors
/**
* Java program to demonstrate how to override method in Java.
* Overridden method are resolved during runtime based upon type of object
* @author Javin
*/
public class CollectionTest {
public static void main(String args[]) {
Runnable task = new Task();
task.run(); //call overridden method in Task
task = new PeriodicTask();
task.run(); //calls overridden method in PeriodicTas
}
}
class Task implements Runnable{
@Override
public void run() {
System.out.println("Run method overridden in Task class");
}
}
class PeriodicTask extends Task{
@Override
public void run() {
System.err.println("overridden method run() in PeriodicTask class");
}
}
[toc] | [next] | [standalone]
| From | Eric Sosman <esosman@comcast-dot-net.invalid> |
|---|---|
| Date | 2013-12-05 18:25 -0500 |
| Message-ID | <l7r21m$oqe$1@dont-email.me> |
| In reply to | #26734 |
On 12/5/2013 5:42 PM, Y HA wrote:
> Hi!
>
> This code should output:
>
> Run method overridden in Task class
> overridden method run() in PeriodicTask class
>
>
> but I'm having this :
>
> # javac -version
> javac 1.7.0_25
>
> # javac CollectionTest.java
> CollectionTest.java:18: error: incompatible types
> @Override
> ^
> required: Annotation
> found: Override
> CollectionTest.java:27: error: incompatible types
> @Override
> ^
> required: Annotation
> found: Override
> 2 errors
>
>
>
> /**
> * Java program to demonstrate how to override method in Java.
> * Overridden method are resolved during runtime based upon type of object
> * @author Javin
> */
> public class CollectionTest {
>
> public static void main(String args[]) {
> Runnable task = new Task();
> task.run(); //call overridden method in Task
> task = new PeriodicTask();
> task.run(); //calls overridden method in PeriodicTas
> }
>
>
> }
>
> class Task implements Runnable{
> @Override
> public void run() {
> System.out.println("Run method overridden in Task class");
> }
> }
>
> class PeriodicTask extends Task{
> @Override
> public void run() {
> System.err.println("overridden method run() in PeriodicTask class");
> }
> }
It works fine for me, with javac 1.7.0_45 (slightly newer
than yours). Just a wild guess: Does your source file contain
any strange, stray, invisible characters -- NUL's, maybe --
that confuse the compiler but disappear when posted as a Usenet
message? Try copying the content of your message and compiling
that; if you get a different outcome it may be time to use a hex
viewer on both files.
--
Eric Sosman
esosman@comcast-dot-net.invalid
[toc] | [prev] | [next] | [standalone]
| From | Y HA <yuriha@gmail.com> |
|---|---|
| Date | 2013-12-05 16:13 -0800 |
| Message-ID | <0c8bf651-4ff2-46ec-97b9-cdd8d1efe5c9@googlegroups.com> |
| In reply to | #26736 |
I'm updating my RE and SDK...
[toc] | [prev] | [next] | [standalone]
| From | Y HA <yuriha@gmail.com> |
|---|---|
| Date | 2013-12-05 17:00 -0800 |
| Message-ID | <98a7266d-ca07-40ba-808c-1bb60d7099fc@googlegroups.com> |
| In reply to | #26737 |
mmnope, updated SDK and JRE to 1.7.0_45 and still happening
[toc] | [prev] | [next] | [standalone]
| From | Y HA <yuriha@gmail.com> |
|---|---|
| Date | 2013-12-05 17:03 -0800 |
| Message-ID | <663020de-ceee-4c7f-aec1-da1a477b626a@googlegroups.com> |
| In reply to | #26737 |
* created a new file with vi and pasted the code from the web. * updated SDK and RE to 1.7.0_45 still happens the same
[toc] | [prev] | [next] | [standalone]
| From | Eric Sosman <esosman@comcast-dot-net.invalid> |
|---|---|
| Date | 2013-12-05 20:42 -0500 |
| Message-ID | <l7ra30$ui4$1@dont-email.me> |
| In reply to | #26739 |
On 12/5/2013 8:03 PM, Y HA wrote:
>
> * created a new file with vi and pasted the code from the web.
> * updated SDK and RE to 1.7.0_45
>
> still happens the same
Then I'm at a loss. File with strange characters? Unlikely,
if copy/paste from the web (which worked fine for me) still fails
for you. Corrupted Java installation? Again unlikely, since
you've re-installed.
Have you done something to anger the evil spirits? :-(
(In other words: I have no idea what's wrong. Sorry!)
--
Eric Sosman
esosman@comcast-dot-net.invalid
[toc] | [prev] | [next] | [standalone]
| From | Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> |
|---|---|
| Date | 2013-12-07 19:15 +0000 |
| Message-ID | <slrnla6sur.42s.avl@gamma.logic.tuwien.ac.at> |
| In reply to | #26740 |
Eric Sosman <esosman@comcast-dot-net.invalid> wrote: > On 12/5/2013 8:03 PM, Y HA wrote: >> * created a new file with vi and pasted the code from the web. >> * updated SDK and RE to 1.7.0_45 >> still happens the same > Then I'm at a loss. File with strange characters? Unlikely, > if copy/paste from the web (which worked fine for me) still fails > for you. Corrupted Java installation? Again unlikely, since > you've re-installed. > Have you done something to anger the evil spirits? :-( > (In other words: I have no idea what's wrong. Sorry!) one last straw: Y HA, maybe you have a file named Override.java in the same folder as your test file?
[toc] | [prev] | [next] | [standalone]
| From | "John B. Matthews" <nospam@nospam.invalid> |
|---|---|
| Date | 2013-12-05 21:49 -0500 |
| Message-ID | <l7re03$fk3$1@dont-email.me> |
| In reply to | #26734 |
On 12/5/13, 5:42 PM, Y HA wrote:
> /**
> * Java program to demonstrate how to override method in Java.
> * Overridden method are resolved during runtime based upon type of object
> * @author Javin
> */
> public class CollectionTest {
>
> public static void main(String args[]) {
> Runnable task = new Task();
> task.run(); //call overridden method in Task
> task = new PeriodicTask();
> task.run(); //calls overridden method in PeriodicTas
> }
>
>
> }
>
> class Task implements Runnable{
> @Override
> public void run() {
> System.out.println("Run method overridden in Task class");
> }
> }
>
> class PeriodicTask extends Task{
> @Override
> public void run() {
> System.err.println("overridden method run() in PeriodicTask class");
> }
> }
For reference,
$ props.sh | grep "os\."
os.arch: x86_64
os.name: Mac OS X
os.version: 10.9
$ java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
$ java -cp build/classes CollectionTest
Run method overridden in Task class
overridden method run() in PeriodicTask class
--
John B. Matthews
trashgod at gmail dot com
<http://sites.google.com/site/drjohnbmatthews>
[toc] | [prev] | [next] | [standalone]
| From | Fredrik Jonson <fredrik@jonson.org> |
|---|---|
| Date | 2013-12-06 07:01 +0000 |
| Subject | Use of @Override when implementing interfaces (was: @override annotation not working...) |
| Message-ID | <slrnla2tii.76o.fredrik@biggles.jonson.org> |
| In reply to | #26734 |
Y HA wrote:
> class Task implements Runnable {
> @Override
> public void run() {
> System.out.println("Run method overridden in Task class");
> }
> }
Sorry, I can't help with the problem, but the code made me curious.
Is it commont practice to use @Override when implementing interface
methods? Assuming that the method has not been implemented by a
superclass.
Obviously, the annotation is technically allowed, still it isn't really
possible to override an implementation that does not exist. And it
doesn't add type safety to the code, if your method signature doesn't
match the method signature of the interface, the implementing class
won't compile.
--
Fredrik Jonson
[toc] | [prev] | [next] | [standalone]
| From | Silvio <silvio@internet.com> |
|---|---|
| Date | 2013-12-06 09:10 +0100 |
| Subject | Re: Use of @Override when implementing interfaces |
| Message-ID | <52a1867c$0$2911$e4fe514c@news2.news.xs4all.nl> |
| In reply to | #26742 |
On 12/06/2013 08:01 AM, Fredrik Jonson wrote: > Sorry, I can't help with the problem, but the code made me curious. > > Is it commont practice to use @Override when implementing interface > methods? Assuming that the method has not been implemented by a > superclass. > > Obviously, the annotation is technically allowed, still it isn't really > possible to override an implementation that does not exist. And it > doesn't add type safety to the code, if your method signature doesn't > match the method signature of the interface, the implementing class > won't compile. > It is an example of an annotation that should have been syntax and yes, it is common practice. People use this to express that they did not mean to come up with a new method of their own but they intend to override a method from the base class. If no such method exists in an (indirect) base class this will result in an error (or a warning, I forgot).
[toc] | [prev] | [next] | [standalone]
| From | Y HA <yuriha@gmail.com> |
|---|---|
| Date | 2013-12-06 07:08 -0800 |
| Subject | Re: Use of @Override when implementing interfaces |
| Message-ID | <796271a4-11a0-402c-85ff-0f91556c8e7a@googlegroups.com> |
| In reply to | #26743 |
# javac CollectionTest.java
CollectionTest.java:14: error: incompatible types
@Override
^
required: Annotation
found: Override
CollectionTest.java:21: error: incompatible types
@Override
^
required: Annotation
found: Override
2 errors
# java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
[toc] | [prev] | [next] | [standalone]
| From | Y HA <yuriha@gmail.com> |
|---|---|
| Date | 2013-12-06 07:25 -0800 |
| Subject | another error with @Override with another code |
| Message-ID | <06afa354-5858-4359-9e29-6f2b1846e628@googlegroups.com> |
| In reply to | #26748 |
the same happens with this code :
# javac MyMethod.java
MyMethod.java:12: error: incompatible types
@Override
^
required: Annotation
found: Override
1 error
#
public class MyMethod {
String str = "Philadephia";
public void engage(String str) {
System.out.println(str);
}
}
final class Override extends MyMethod {
@Override
public String engage() {
return this.str;
}
/*public void engage(String str) {
System.out.println(str + " " + str);
}
*/
public static void main(String[] args) {
Override sc = new Override();
//the method you intended to override:
//sc.engage("Philadephia");
System.out.println(sc.engage());
}
}
[toc] | [prev] | [next] | [standalone]
| From | "John B. Matthews" <nospam@nospam.invalid> |
|---|---|
| Date | 2013-12-06 11:29 -0500 |
| Subject | Re: another error with @Override with another code |
| Message-ID | <l7su1k$njq$1@dont-email.me> |
| In reply to | #26749 |
On 12/6/13, 10:25 AM, Y HA wrote:
> the same happens with this code :
[...]
> final class Override extends MyMethod {
>
> @Override
> public String engage() {
> return this.str;
> }
[...]
> }
In this example, the identifier Override used for the class name
collides with the same identifier used for the annotation name. You can
use the fully qualified name, @java.lang.Override, or rename the class.
public class MyMethod {
private static final String str = "Philadephia";
public void engage(String str) {
System.out.println(str);
}
private static final class MyOverride extends MyMethod {
@Override
public void engage(String str) {
super.engage(str);
}
public static void main(String[] args) {
MyOverride mo = new MyOverride();
mo.engage(str);
}
}
}
--
John B. Matthews
trashgod at gmail dot com
<http://sites.google.com/site/drjohnbmatthews>
[toc] | [prev] | [next] | [standalone]
| From | Y HA <yuriha@gmail.com> |
|---|---|
| Date | 2013-12-06 09:21 -0800 |
| Subject | Re: another error with @Override with another code |
| Message-ID | <33f33be7-61be-411f-9dee-704118dfb44f@googlegroups.com> |
| In reply to | #26753 |
got this error with this code which also uses @Override
# javac MySuperClass.java
MySuperClass.java:11: error: incompatible types
@Override
^
required: Annotation
found: Override
1 error
public class MySuperClass {
public void doTheThing() {
System.out.println("Do the thing");
}
}
class MySubClass extends MySuperClass{
@Override
public void doTheThing() {
System.out.println("Do it differently");
}
}
[toc] | [prev] | [next] | [standalone]
| From | "John B. Matthews" <nospam@nospam.invalid> |
|---|---|
| Date | 2013-12-07 00:26 -0500 |
| Subject | Re: another error with @Override with another code |
| Message-ID | <l7ubif$bom$1@dont-email.me> |
| In reply to | #26754 |
On 12/6/13, 12:21 PM, Y HA wrote:
> got this error with this code which also uses @Override
>
> # javac MySuperClass.java
> MySuperClass.java:11: error: incompatible types
> @Override
> ^
> required: Annotation
> found: Override
> 1 error
>
>
>
> public class MySuperClass {
>
> public void doTheThing() {
> System.out.println("Do the thing");
> }
> }
>
>
> class MySubClass extends MySuperClass{
>
> @Override
> public void doTheThing() {
> System.out.println("Do it differently");
> }
> }
I see no error on the platform cited up-thread. You may have
adventitious classes in the classpath. Start with a clean build; failing
that, scrutinize your IDE's cache and your platform's java.ext.dirs.
--
John B. Matthews
trashgod at gmail dot com
<http://sites.google.com/site/drjohnbmatthews>
[toc] | [prev] | [next] | [standalone]
| From | Knute Johnson <september@knutejohnson.com> |
|---|---|
| Date | 2013-12-06 21:57 -0800 |
| Subject | Re: another error with @Override with another code |
| Message-ID | <l7udbu$ie0$1@dont-email.me> |
| In reply to | #26756 |
On 12/6/2013 9:26 PM, John B. Matthews wrote:
> On 12/6/13, 12:21 PM, Y HA wrote:
>> got this error with this code which also uses @Override
>>
>> # javac MySuperClass.java
>> MySuperClass.java:11: error: incompatible types
>> @Override
>> ^
>> required: Annotation
>> found: Override
>> 1 error
>>
>>
>>
>> public class MySuperClass {
>>
>> public void doTheThing() {
>> System.out.println("Do the thing");
>> }
>> }
>>
>>
>> class MySubClass extends MySuperClass{
>>
>> @Override
>> public void doTheThing() {
>> System.out.println("Do it differently");
>> }
>> }
>
> I see no error on the platform cited up-thread. You may have
> adventitious classes in the classpath. Start with a clean build; failing
> that, scrutinize your IDE's cache and your platform's java.ext.dirs.
>
My mother always said if I hung out with the smart kids, I might just
learn some new vocabulary.
ad·ven·ti·tious
[ad-vuhn-tish-uhs] Show IPA
adjective
1.
associated with something by chance rather than as an integral part;
extrinsic.
--
Knute Johnson
[toc] | [prev] | [next] | [standalone]
| From | Eric Sosman <esosman@comcast-dot-net.invalid> |
|---|---|
| Date | 2013-12-07 08:44 -0500 |
| Subject | Re: another error with @Override with another code |
| Message-ID | <l7v8o6$c74$1@dont-email.me> |
| In reply to | #26756 |
On 12/7/2013 12:26 AM, John B. Matthews wrote:
>[...]
> I see no error on the platform cited up-thread. You may have
> adventitious classes in the classpath. Start with a clean build; failing
> that, scrutinize your IDE's cache and your platform's java.ext.dirs.
"Adventitious classes" seems to me the most likely cause.
To expand and (I hope) explain:
Things like `int' and `throw' are built in to the Java
compiler, but names like `Runnable' and `MyClass' are not:
They are merely names, whose definitions need to be found
somewhere. When javac encounters `implements Runnable' it
doesn't somehow know you mean `implements java.lang.Runnable',
but must deduce your intent by searching for a suitable
definition of `Runnable'.
The problem (probably) is that javac when javac searches
for `Override', it finds some other `Override' before it finds
`java.lang.Override'. John B. Matthews already diagnosed one
of your other problems; in that one, you had an actual class
named `Override'. Well, if the file with that `Override' class
is in the same package as the file you're trying to compile,
javac will find that `Override' class -- and since the `Override'
class is not an `Annotation' (a special kind of `interface'),
it complains.
Try any of these:
1) Move all your other *.java files out of the current
directory and away to a desert island where javac won't find
them, then try compiling.
2) Rename your `Override' class to `Overturn' (you may
also need to rename the containing file), then try compiling.
3) Change `@Override' to `@java.lang.Override', then try
compiling.
4) Add `import java.lang.Override;' at the start of the
troublesome source, then try compiling.
If I'm right, any of these will fix your problem. In the
future, try to avoid reusing names already defined by Java's
class library -- especially those in the java and java.lang
packages, which are automatically visible to all compilations.
There are no reserved names (or almost no reserved names) in
Java, but you're just begging for trouble if you redefine them.
--
Eric Sosman
esosman@comcast-dot-net.invalid
[toc] | [prev] | [next] | [standalone]
| From | "Chris Uppal" <chris.uppal@metagnostic.REMOVE-THIS.org> |
|---|---|
| Date | 2013-12-07 11:12 +0000 |
| Subject | Re: another error with @Override with another code |
| Message-ID | <hvSdndiAvLhQnz7PnZ2dnUVZ7tadnZ2d@bt.com> |
| In reply to | #26754 |
Y HA wrote:
> got this error with this code which also uses @Override
Clutching at straws here, but is it possible that this is a character-set
problem ? If you are using a character set in which <some byte> shows up as
"@", and your editor knows that you are using that character-set, then it'll
all /look/ correct. But if the javac compiler thinks you are using a different
character-set, and one in which <that byte> maps to something else, then it'll
throw the code out.
-- chris
[toc] | [prev] | [next] | [standalone]
| From | Stanimir Stamenkov <s7an10@netscape.net> |
|---|---|
| Date | 2013-12-07 16:32 +0200 |
| Subject | Re: Use of @Override when implementing interfaces |
| Message-ID | <l7vbhp$pdi$1@dont-email.me> |
| In reply to | #26748 |
Fri, 6 Dec 2013 07:08:55 -0800 (PST), /Y HA/: > # javac CollectionTest.java > CollectionTest.java:14: error: incompatible types > @Override > ^ > required: Annotation > found: Override > CollectionTest.java:21: error: incompatible types > @Override > ^ > required: Annotation > found: Override > 2 errors > > # java -version > java version "1.7.0_45" > Java(TM) SE Runtime Environment (build 1.7.0_45-b18) > Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode) What about the javac version? # javac -version -- Stanimir
[toc] | [prev] | [next] | [standalone]
| From | Y HA <yuriha@gmail.com> |
|---|---|
| Date | 2013-12-08 12:02 -0800 |
| Subject | Re: Use of @Override when implementing interfaces |
| Message-ID | <b8ada45d-d9f6-440d-943a-149d05318136@googlegroups.com> |
| In reply to | #26766 |
using @java.lang.Override seems to have worked... why there was the need to specify java.lang.Override ?
[toc] | [prev] | [next] | [standalone]
Page 1 of 2 [1] 2 Next page →
Back to top | Article view | comp.lang.java.programmer
csiph-web