Por que esse método Java parece ter dois tipos de retorno?

public  List getResult(String s); 

onde Foo é minha própria class.

Qual é o tipo de retorno desse método? Por que parece ter dois tipos de retorno?

Não, você não tem dois tipos de retorno. É um método genérico que você está vendo.

   --> you are declaring a generic type for your method List --> this is your return type 

Seu método pode ter um tipo genérico E que é uma subclass de Foo . seu tipo de retorno é uma List

O tipo de retorno é List . A cláusula não é um tipo de retorno; é uma declaração de tipo genérico, especificando que o tipo específico E deve ser um Foo (ou uma subclass de Foo ). Essa é a syntax padrão para declarar um método genérico.

Dê uma olhada na documentação do Java referente a genéricos.

  // declares the bounds for the generic type `E` List // declares the return value 

O tipo de retorno do método é List .