加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java中的MVC,只需要指向一个正确的方向

发布时间:2020-12-15 08:46:54 所属栏目:Java 来源:网络整理
导读:我不是编程的总菜鸟.我用一种语言或另一种语言编写了20年.只是不在 Java.我的主要语言是iOS和OS X上的Objective C. 我正在开发一个Java应用程序,我正在尝试实现iOS强制执行的MVC模式.即我的UI,数据模型是单独的类和第三类,控制器是’胶水’. 我想要做的是在
我不是编程的总菜鸟.我用一种语言或另一种语言编写了20年.只是不在 Java.我的主要语言是iOS和OS X上的Objective C.

我正在开发一个Java应用程序,我正在尝试实现iOS强制执行的MVC模式.即我的UI,数据模型是单独的类和第三类,控制器是’胶水’.

我想要做的是在目标c中超级简单,我整晚都在搜索谷歌试图在java中找到相同的模式.

例如,我有两个班级. A类和B类.A类实现main(). main实例化B类.我需要B类才能调用A类方法的实例.我是Objective-C,B类有一个指向A类的指针作为一个invar.
因此,当类A实例化类B时,它将所述指针设置为自身,因此类B现在具有对类A的引用,并且可以调用其公共方法.

但似乎我不能从A类中做到这一点,它会在B类中放弃(在A类main()中.Netbeans抱怨无法从静态方法访问非静态变量到类似的东西.它似乎是主要的( )需要保持静止.

我想也许我可以在Cocoa中为AppDeleagte添加另一个类模拟.
所以我在其他一些类中有一个main(),它会实例化MVC.

我对静态没有明显的限制.我遇到它的唯一一次是本地需要通过连续的方法调用来保留其值.

我从来没有声明一个方法静态,也没有遇到访问通常在范围内的任何变量的任何问题.

这看起来很简单我觉得我错过了一些明显的东西.

PS我正在使用NetBeans 7.01,而我只是自己潜入Java.我已经尝试过获取雅虎聊天室的帮助,以及来自fb的朋友,但他不得不跑.

我感谢任何人给予的任何帮助.

感谢您阅读这个漫步,并度过了一个美好的夜晚.

解决方法

这里有几个问题,我会尝试将它们分解并至少回答其中一些问题:

首先,为了能够调用A的实例方法,您需要在实例化时向B提供实例.以下示例正是如此:

public class A {
    public static void main(String[] args) {
        new A().run();
    }
    public void run() {
        B b = new B(this);
        b.run();
    }

    public void foo() {
        System.out.println("2.");
    }
}

public class B {
    private final A a;
    public B(A a) { this.a = a; }

    public void  run() {
        System.out.println("1.");
        a.foo();
    }
}
// Output:
// 1.
// 2.

这里的重要区别是Java不会让您神奇地访问当前执行目标的调用堆栈或“父”.这意味着如果要调用它们,您确实需要将所有内容转发到新实例.

其次,正如NetBeans指出的那样,您无法从静态上下文访问非静态成员.最好用一些代码显示:

public class A {
    public static void foo() {}
    public void bar() {}

    public static int i = 0;
    public int j = 1;
}

public class B {
    public static void main(String[] args) {
        A.foo();       // works because foo() is static
        A.bar();       // compile error
        new A().bar(); // works because now you're calling
                       // non-static instance's bar() method.

        // Pretty much the same applies to fields;
        A.i = 2;       // works
        A.j = 2;       // compile error,once again
        new A().j = 2; // works
    }
}

Java中的static几乎相当于一个全局类(这使得它在OOP中成为一个非常危险的关键字,老实说应该不惜一切代价避免).几乎所有其他东西都需要以OOP方式访问,或者换句话说,通过对象实例访问.

虽然对于某些事情具有全局状态听起来可能是合理的(例如应用程序的配置),但从长远来看它不是 – 你可以创建一个包含配置状态的看似单独的对象,但是可以动态修改需要;这样,您可以避免在配置更改时重新启动应用程序.

我希望这有助于并回答您的问题,如果需要,可以毫不犹豫地提出更多问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读