A NullPointerException
происходит из-за того, что Computation
не был создан, поэтому он все еще нулевой.
Интерфейсы, если вы используете их как объект, подобный тому, что вы здесь делаете, должны быть созданы, потому что вы рассматриваете его как объект.
Для вас есть несколько решений:
1) Вы можете просто создать экземпляр Computation
с созданным вами объектом Foo
.
public class MainClass extends Activity{
private TextView tv;
Computation mComputation = new Foo();
...
}
Это будет работать, потому что вы создаете экземпляр Computation
с экземпляром Foo
, используя его конструктор по умолчанию.
2) Для методов, которые вы имеете в виду, вместо этого вы можете просто использовать статические методы.Это избавляет от необходимости создавать экземпляр интерфейса.
public interface Computation{
public static double add(double somenumber, double anothernumber){
return somenumber + anothernumber;
}
public static int multiply(int somenumber, int anothernumber){
return somenumber * anothernumber;
}
}
Затем используйте его в MainActivity следующим образом:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = findviewById(R.id.textview);
tv.setText(Computation.multiply(4, 9))
}
Вам не понадобится объект Computation mComputation = new Foo();
с этим решением.
3) Вына самом деле можно просто использовать методы интерфейса по умолчанию и устранить необходимость создания Foo
.
public interface Computation{
default double add(double somenumber, double anothernumber){
return somenumber + anothernumber;
}
default int multiply(int somenumber, int anothernumber){
return somenumber * anothernumber;
}
}
Тогда в вашей MainActivity:
public class MainClass extends Activity implements Computation{
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = findviewById(R.id.textview);
tv.setText(multiply(4, 9))
}
}
С этим решением вам просто нужно реализоватьComputation
интерфейс, и может просто вызывать методы multiply()
и add()
.Если ваш метод достаточно прост и функциональность метода одинакова для всех реализаций, использование методов по умолчанию поможет уменьшить объем кода.