Я хочу разработать библиотеку с новой идеей для приложений Android, но у меня проблема. Как я могу вызвать метод после другого метода?
Например...
Toast.makeText(context, "", Toast.LENGTH_SHORT).show();
мои коды
MyClass класс
public class MyClass {
public static MyClass A(){
return A();
}
public static void show(){
}
Класс MainActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//It's normal
MyClass.A();
//if he wrote like this I want tell him error
MyClass.show();
//I want like this
MyClass.A().show();
}
Вы имеете в виду, что хотите знать, что должен вернуть ваш первый метод, чтобы вызвать второй? Если это так, ответ: любой объект, у которого есть метод. Ваш вопрос - это путь к широкому
Я хочу показать метод только после вызова определенного метода, но если он написал Toast.show (); не показывать.
@jhamon да, я хочу это
thing.a().b().c() только в том случае, если thing.a() возвращает некоторый объект с помощью метода b(), а затем этот метод b() затем возвращает объект с методом c() и т. д. thing.a().b() эквивалентен BThing bt = thing.a(); bt.b(), но не делает bt видимой переменной в коде.
public static MyClass A(){ return A(); } Это вызовет StackOverflowError ..




То, что вы хотите, не имеет значения.
Важно то, как классы и методы работают в Java.
Поскольку вы объявляете show() как static, единственный способ вызвать его:
MyClass.show();
Если вы удалите ключевое слово static, вы можете сделать это:
MyClass myClass = new MyClass();
myClass.show();
как это ответить на вопрос?
@jhamon OP спрашивает, как он может вызвать шоу после создания тоста, вы читали?
вы должны вызвать метод show после метода makeText (), но вы не можете использовать Toast.show (). , Это то, что я хочу, чтобы метод вызывал только после вызова определенного метода в моей библиотеке.
@TahaSami Это то, что делает этот код. Он готовит тосты и показывает их, когда они вам нужны.
@TahaSami см. Мой отредактированный ответ
Это пример, но у меня есть моя библиотека, например у меня есть класс Color внутри класса, там 2 метода A (); показать(); Если бы я написал Color.A (); будет отображаться, и если я написал Color.show (); будет отображаться, но я хочу, чтобы он написал Color.show (); теперь отображается, но если он написал Color.A (), тогда show будет отображаться следующим образом: Color.A (). show ();
Разместите свой код, чтобы мы перестали гадать, что вы хотите
@TahaSami Если вы хотите получить помощь, вы должны четко сформулировать свою проблему. В данном случае это не так. Отредактируйте свой вопрос, используя более точную формулировку и необходимый код.
Хорошо, я изменю свое участие Подождите 5 минут
Изменено вы можете увидеть сейчас
@TahaSami Так какое отношение все это имеет к Toast?
Проблема решилась наверху, спасибо за уделенное время :)
Сложно понять, чего вы хотите, но, возможно, это то, что вы ищете:
public class Toast {
private String text = null;
public Toast makeText(final String text) {
this.text = text;
return this;
}
public void show() {
if (text == null) throw new IllegalStateException("Text must be set before you can call show.");
System.out.println(text);
}
public static void main(final String[] args) {
final Toast toast = new Toast();
toast.makeText("test").show();
final Toast toastError = new Toast();
toastError.show();
}
}
Возвращая экземпляр объекта в методе makeText, вы можете впоследствии вызвать show.
да, я хочу вот так, но хочу, чтобы он написал myClass.show (); скажи ему ошибку
@TahaSami обновил ответ, чтобы генерировать исключение, если текст не установлен.
@knutesten Есть ли способ сделать так, чтобы он появлялся только после использования метода makeText?
@TahaSami Я не понял вашего вопроса. Что должно появиться только после вызова makeText?
@TahaSami Вы не хотите, чтобы метод show существовал до вызова makeText?
Теперь он работает, спасибо большое
@knutesten да я хочу это :)
Понятия не имею, зачем вам это нужно, но может быть что-то вроде этого:
static class MyClass{
private static MyClass instance;
public static MyClass A(){
if (instance == null){
instance = new MyClass();
}
return instance;
}
public void show(){
// TODO: Do something
}
}
И теперь вы можете называть это так:
MyClass.A().show();
MyClass теперь является Синглтон, у которого есть только один активный экземпляр. Я бы посоветовал переименовать MyClass в MySingleton и A() в getInstance(). (Кроме того, если вы используете его в нескольких потоках и хотите сделать его потокобезопасным, вы можете добавить в метод ключевое слово synchronized. Но я предполагаю, что он однопоточный, учитывая, что вы используете его в своем классе Android Activity, который использует UI-поток по умолчанию.)
Вы делаете именно то, что делали там, - цепляйте их, если разрешено. Или напишите функцию, которая вызывает A (), затем B (). Если вы имеете в виду нечто большее, вам нужно быть более ясным в том, о чем вы спрашиваете.