2017-02-15 32 views
0

поэтому я этот код здесь: хотел бы знать, почему 2 ниже примеры дает ошибку времени выполнения и ошибки компиляциипричина, почему этот код ошибки во время выполнения против ошибки компиляции

public abstract class Person<Mate> { 
    public String name; 
    public abstract Person<?> mate(Mate m); 

    public static class Male extends Person<Person<?>.Female> { 
    public Person<?> mate(Person<?>.Female m) { 
     return null; 
    } 
    } 

    public class Female extends Person<Male> { 
    public Person<?> mate(Male m) { 
     return null; 
    } 
    } 
} 

может кто-нибудь сказать мне, почему это пример кода дает ошибку времени выполнения

Person p = new Male(); 
p.mate(p); 

в то время как это один дает ошибку компиляции

Person p<Female> = new Male(); 
p.mate(p); // Argument is of incorrect type. 
+0

Пожалуйста, добавьте ** полное сообщение об ошибке компиляции/время выполнения error sessage + stacktrace в ваш вопрос. –

ответ

1

Это потому, что:

Person p = new Male(); 

является примером использования Raw Types.

Использование любых необработанных типов заставляет JVM делать очень странные вещи. Не используйте их.

+0

Также, используя необработанные типы, будут выдавать предупреждения типов. Прислушайтесь к предупреждениям. –