【问题标题】:Can't referr to my get method不能参考我的get方法
【发布时间】:2014-07-14 10:38:17
【问题描述】:

我有一个很棒的好看的课程:

public class SayingsHolder extends Application{

    ArrayList<String> SayingsList = new ArrayList<String>(){{
        SayingsList.add("1");
        SayingsList.add("2");

    }};

    public ArrayList<String> getSayingsList() {
        return SayingsList;
    }
}

现在我正在尝试通过以下方式在我的活动的FragmentStatePagerAdapter 中调用getSayingsList 方法:

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {   
    final SayingsHolder holder = (SayingsHolder).getApplication();
}

现在一切都很好,但是当我这样编写代码时:

 private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {   
        final SayingsHolder holder = (SayingsHolder).getApplication();
        holder.getSayingsList();
    }

上面写着:

Syntax error on token "getSayingsList", Identifier expected after this token

问题是holder 根本不起作用。我的意思是,当我输入 holder. 时,getSayingsList 根本没有显示。

我在这里缺少什么?我知道这是一个非常小的问题,但似乎我无法发现它。我的活动extends FragmentActivity 如果它很重要

我似乎在这里遗漏了一些东西。我无法在我的活动中调用我的方法anywhere。我开始赏金,因为我需要一个例子。

【问题讨论】:

  • I'm starting a bounty, because I need an example. 我想你需要一个java入门。

标签: java android class android-fragments android-activity


【解决方案1】:

一个简单的答案是“类主体中不允许使用语句”。对您的程序来说,最简单的解决方法是创建一个实例列表变量,例如。

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {   
    final SayingsHolder holder = (SayingsHolder).getApplication();
    ArrayList<String> sayingsList = holder.getSayingsList();
}

这只是一种选择。您也可以将此holder.getSayingsList(); 移动到方法体或静态块中。 像所有其他答案一样,您的程序问题是语法错误。

根据 Java 语法,类主体可以有成员声明、静态块、方法声明、另一个类声明、构造函数等。您可以在 http://docs.oracle.com/javase/specs/jls/se7/html/jls-18.html 上阅读有关此内容的信息。这可能会造成混淆,因此请先参考http://docs.oracle.com/javase/specs/jls/se7/html/jls-2.html。这给出了每个符号的概念。

public class ScreenSlidePagerAdapter {
    // This is a member declaration. So "holder" is now a class member.
    final SayingsHolder holder = (SayingsHolder).getApplication();

    // This is a constructor
    public ScreenSlidePagerAdapter(){
    }

    // An inner class
    class InnerScreenSlidePagerAdapter{
    }

    // A method
    public void aMethod() {
    }

    // This is a static block
    static {
    }

}

所有这些都可以在类中使用。但是在您的情况下,您正在尝试向类主体添加语句。这不符合语法规则

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {       
    final SayingsHolder holder = (SayingsHolder).getApplication(); //This line a member declaration. And a valid sysntax. So no issues here

    holder.getSayingsList(); // This is a statement. So this line creates issue as its not part of a class body. 
                // Statements should be enclosed within a method body or static block or for an assigment.

    //But instead if you say it like
    List<String> sayingsList = holder.getSayingsList(); // Now it became a filed(member) declaration. You are trying to declare a member names "sayingsList" just like you created "holder" above
    //So now we converted the statement to a member declaration
}

希望对你有帮助

【讨论】:

  • 看来我错过了这些规则。这正是我一直在寻找的。非常感谢你帮助我。我应该投反对票。
【解决方案2】:

您不能在方法之外拥有不是声明的语句。 “holder.getSayingsList();”语句必须在方法或静态初始化块中。

【讨论】:

    【解决方案3】:

    在类的定义中,可以有方法和属性。 “持有人.getSayingsList();”是属于方法内部的语句。它不能单独存在于类的定义中。

    这是一个例子:

    public class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {   
        final SayingsHolder holder = SayingsHolder.getApplication();
    
        /* You cannot use holder here. Statements like this must be inside a method.
        holder.getSayingsList();
         */
    
        /* For the same reason, you cannot do this here:
        System.out.println("Hello World!");
         */
    
        /* You CAN use holder in an instance method */
        public void foo() {
            holder.getSayingsList();
        }
    
        /* You can use it in a class method, but you must instantiate a ScreenSlidePagerAdapter object first */
        public static void main(String[] args) {
    
            ScreenSlidePagerAdapter obj = new ScreenSlidePagerAdapter();
            obj.getHolder().getSayingsList();
    
            /* you can do this too */
            obj.foo();
    
        }
    
        //getter for the holder variable
        public SayingsHolder getHolder() {
            return holder;
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-31
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多