Rumah  >  Soal Jawab  >  teks badan

Isu kompilasi dengan generik Java

Kod sumber adalah seperti berikut dan melompat ke gesaan di bawah ini jelas tidak boleh disusun

Saya rasa satu sebabnya ialah

 BoundedEcho<String> stringEcho = new BoundedEcho<String>();

String di sini tidak boleh mewarisi Nombor Ia bukan subkelas String Adakah ini betul?

Kemudian soalan lain ialah, saya lulus dalam objek new BoundedEcho<Integer> dalam perenggan terakhir, dan ia milik BoundedEcho<T>, mengapa ralat dilaporkan di sini?

Betul BoundedEcho改为public class BoundedEcho<? extends Number> {...}?

Kod sumber ada di sini

public class BoundedEcho<T extends Number> {

    public T echo(T value) {
        return value;
    }

    public BoundedEcho<T> echo(BoundedEcho<T> value) {
        return value;
    }
}
public class BoundedEchoChamber{
    public static void main(String[] args) {
        BoundedEcho<Number> numberEcho = new BoundedEcho<Number>();
        numberEcho.echo(10);
        numberEcho.echo(10d);
        numberEcho.echo(10f);
        numberEcho.echo(10L);
    
        BoundedEcho<String> stringEcho = new BoundedEcho<String>();
        
        numberEcho.echo(new BoundedEcho<Integer>());
        numberEcho.echo(new BoundedEcho<Double>());
        numberEcho.echo(new BoundedEcho<Float>());
        numberEcho.echo(new BoundedEcho<Long>());
    }
}
世界只因有你世界只因有你2687 hari yang lalu476

membalas semua(1)saya akan balas

  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-17 10:05:13

    Masalahnya terletak pada dua ayat ini

    public BoundedEcho<T> echo(BoundedEcho<T> value) {
            return value;
        }
        
    BoundedEcho<Number> numberEcho = new BoundedEcho<Number>();

    Apabila membuat seketika, anda mengisytiharkan T sebagai Nombor, dan panggilan seterusnya mestilah BoundedEcho<Nombor>. Sebabnya ialah jenis seperti BoundedEcho<Integer> dan BoundedEcho<Number>

    balas
    0
  • Batalbalas