Что делает компилятор Java с несколькими универсальными границами?

Взгляните на этот (возможно, глупый) код:

public <T extends Appendable & Closeable> void doStuff(T object)
throws IOException{

    object.append("hey there");
    object.close();

}

Я знаю, что компилятор удаляет общую информацию, поэтому меня интересует код Java 1.4, эквивалентный тому, что делает компилятор (я почти уверен, что компилятор не изменяет исходный код, поэтому я прошу эквивалентную версию исходного кода Java, которую могут понять наивные люди вроде меня)

Это примерно так:

public void doStuff(Object object)
throws IOException{

    ((Appendable)object).append("hey there");
    ((Closeable)object).close();

}

Или, скорее, так:

public void doStuff(Object object)
throws IOException{
    Appendable appendable = (Appendable) object;
    Closeable closeable = (Closeable) object;

    appendable.append("hey there");
    closeable.close();

}

Или даже так:

public void doStuff(Appendable appendable)
throws IOException{
    Closeable closeable = (Closeable) appendable;

    appendable.append("hey there");
    closeable.close();

}

Или еще одна версия?

13
задан Sean Patrick Floyd 23 November 2010 в 16:39
поделиться