查阅1.5的src,里面肯定是没有将这两个Modifiers用于修饰Method其次这两个方法是
public PrintStream append(CharSequence csq) throws IOException 和
public PrintStream append(char c) throws IOException
因此并没有冲突
程序没有运行过,关于为什么会出现上面的现象,不知道大家有没有注意到,这两个关键字出现的地方Method都是有返回值的,而且所返回的对象类型都是在@since 1.5或者在1.5里面有实质改动的,所以......

解决方案 »

  1.   

    我在这个帖子的回复几乎都是让你们看清楚我的问题。shine333(enihs):你有没有数数我列出的append函数有几个?
      

  2.   

    Appendable append(char)其实就是PrintStream apppend(char)
    这个是上次有人问extends PrintStream用1.5编译不通过时,发现的。PrintStream implements Appendable,但是无论看src还是api都没有发现Appendable接口中的返回类型为Appendable的方法,所以就猜想有问题。结果让我发现了这个1.5里面的新特性,implemention可以以接口中定义的返回类型的子类型来作为返回类型,如下例C:\Program Files\Java\j2sdk1.5.0\bin>type D:\j2sdk1.4.1_01\Test.java
    public class Test implements A {
      public Test a() {
        return this;
      }
    }interface A {
      A a();
    }
    C:\Program Files\Java\j2sdk1.5.0\bin>javac -verbose D:\j2sdk1.4.1_01\Test.java
    [D:\j2sdk1.4.1_01\Test.java を構文解析開始]
    [110ms で構文解析完了]
    [ソースファイルの検索パス: [D:\j2sdk1.4.1_01\myproject\classes]]
    [クラスファイルの検索パス: [C:\Program Files\Java\j2sdk1.5.0\jre\lib\rt.jar, C:\Program Files\Java\j
    2sdk1.5.0\jre\lib\jsse.jar, C:\Program Files\Java\j2sdk1.5.0\jre\lib\jce.jar, C:\Program Files\Javaj2sdk1.5.0\jre\lib\charsets.jar, C:\Program Files\Java\j2sdk1.5.0\jre\lib\ext\dnsns.jar, C:\Program
    Files\Java\j2sdk1.5.0\jre\lib\ext\localedata.jar, C:\Program Files\Java\j2sdk1.5.0\jre\lib\ext\sunjc
    e_provider.jar, C:\Program Files\Java\j2sdk1.5.0\jre\lib\ext\sunpkcs11.jar, D:\j2sdk1.4.1_01\myproje
    ct\classes]]
    [C:\Program Files\Java\j2sdk1.5.0\jre\lib\rt.jar(java/lang/Object.class) を読み込み中]
    [Test を確認中]
    [D:\j2sdk1.4.1_01\Test.class を書き込み完了]
    [A を確認中]
    [D:\j2sdk1.4.1_01\A.class を書き込み完了]
    [合計 731ms]C:\Program Files\Java\j2sdk1.5.0\bin>
      

  3.   

    shine333(enihs:
        有道理。这个特性倒是还可以。不过,class实现该特性的方法实在不敢恭维。
    因为在class里为了实现那个接口会多出个同名同参数的方法,
    (用volatile标记)这已经跟以前版本不兼容了,许多用到reflect
    的程序可能都要加以改动。我也是因为以前写的好好的程序出了问题
    才发现这个所问题的。这个特性更多的是给我带来麻烦。至于把transient用在方法定义上,我猜可能是用于Class对象序列化的
    兼容上的,一个对象本身的Class在序列化时是只传递Class名字和它的
    接口定义的摘要。标记volatile和transient的可能做就不计算在内了。