2016-04-13 4 views
1

Этот вопрос только для меня, чтобы понять эту концепцию. Как можно отклонить null (Throwable)? null - это не право класса? Этот вопрос, возможно, глупо.Каким образом null может быть отправлен в Throwable super ((Throwable) null);

Я знаю, что:

public class SuperClass{ 
    int id = 0; 
    public SuperClass(int id){ 
     this.id = id; 
    } 
} 

public class SubClass extends SuperClass{ 
    public SubClass(int id) { 
     super(id); 
    }  
} 

public class Tester{ 
    SubClass sub = new SubClass(1); 
    SuperClass s = new SuperClass(2); 
    SuperClass s1 = new SubClass(3); 

    public Tester(){ 
     if(s1 instanceof SubClass){ 
      //true 
      SubClass subClass = (SubClass) s1; 
     } 
    }  
}` 
+0

Просьба указать код, в котором 'Throwable' заносится в' null'. Это какой-то случай, когда это необходимо, но сложно сказать или объяснить без кода – ortis

+0

Как ваш код относится к вопросу? –

ответ

1

Как Null быть отлиты в (Throwable)? null - это не право класса?

null не имеет типа. null может быть переведен в любой класс или тип интерфейса. Его нельзя отнести к первому.

Throwable - класс в упаковке java.lang.

Вы не можете произносить классы, только ссылки.

String s = "Hello"; 

Здесь переменная s является ссылка не класс или объект, ни даже String.

Throwable t = new Throwable(); 

Здесь переменная t является ссылкой на Throwable но он может быть установлен в null;

Throwable t = null; // the reference doesn't point to any object. 
+0

О, спасибо, это было хорошее объяснение! – theo231022

1

Ключевой момент отметить, что вы можете бросить null любого ссылочного типа, в конце концов результат нулевой снова.

1

null это не тип. он может теоретически быть сравнима с экземпляром любого класса

String s = (String)null; 
Integer i = (Integer)null; 
+0

ok теперь имеет смысл для меня, я видел это где-то в классах из системы после возникновения исключения. – theo231022

0

Как написали другие, вы можете отличить нуль от всего.

Как правило, вам не нужно будет, что вы можете написать:

String nullString = null; 

, не подвергая там актеров.

Единственное место, где такие забросы смысл являются:

а), если вы хотите, чтобы убедиться, что конкретный метод вызывается, как:

void foo(String bar) { ... } 
void foo(Object bar) { ... } 

тогда это будет иметь значение, если вы тип

foo((String) null) vs. foo(null) 

b) если вы собираетесь использовать свою IDE для генерации кода; например, я обычно пишу модульные тесты, например:

@Test(expected=NullPointerException.class) 
public testCtorWithNullWhatever() { 
    new MyClassUnderTest((Whatever) null); 
} 

Я делаю TDD; это означает, что класс «MyClassUnderTest», вероятно, еще не существует. Записав этот код, я могу использовать мою среду IDE для создания нового класса; и затем сгенерировать конструктор, принимающий аргумент «Независимо».

Смежные вопросы