我正在尝试用Java实现某种MVC.实际上它更像是一个MVP,但这对我的问题并不重要.
以下情况:我有一个用Netbeans制作的GUI(因为更好的GUIeditor),它经常更新和更改.
由于我的主项目在Eclipse中更易于维护,因此我选择将Netbeans项目作为单独项目导入Eclipse.所以这里我的项目" App"包含控制器和模型包以及GUI包含视图包的项目" ".问题是我遵循的模式在视图和控制器之间具有循环依赖性.每当视图发生更改时,控制器都会收到通知,决定从模型中获取哪些数据,然后对视图进行更改.
当我添加App到构建路径GUI和反过来时,我将最终得到此错误消息"在项目'GUI'的构建路径中检测到循环".我的意思是,这个循环已经在我的设计中了.
目前在启动时我通过以下方式向其控制器注册视图(这不是真正的代码,我试图缩短它)
package view;
import controller.*;
class viewA{
...
public viewA() {
controllerA.register(this);
}
...
}
package controller;
import view.*;
class controllerA implements SomeListener{
...
protected viewA[] registeredViews;
public static register(viewA interestedView){
arrayPush(registeredViews,interestedView);
interestedView.addSomeListener(this)
}
...
}
Run Code Online (Sandbox Code Playgroud)
因此,您可以通过将引用传递给控制器,然后将侦听器注册到此视图来进行连接.问题是:如果我没有GUI在项目App的构建路径导入不能得到解决,同样的情况,对于没有App在GUI构建路径.
我想保留这个项目结构,并坚持我的MVC架构.我该如何解决这个问题?你有什么建议?
假设我有一个类SuperClass和两个继承自SuperClass的子类SubClassA和SubClassB.
abstract class SuperClass{
...
List someList;
...
}
class SubClassA extends SuperClass{
...
List<String> someList;
...
}
class SubClassB extends SuperClass{
...
List<Integer> someList;
...
}
Run Code Online (Sandbox Code Playgroud)
这样很方便,因为我可以得到someList.size()的Superclass,并在子类具有类型安全.问题是它没有"感觉"正确,你能想到这个我不知道的潜在危险吗?
我阅读了很多循环依赖主题,但所有这些主题似乎都与声明有关.我感兴趣的是如何构建相互依赖的对象,以及我的方法是否存在潜在的缺陷.考虑这个简单的例子:
#include <iostream>
#include <vector>
using namespace std;
class A; //Forward declaration
class B{
public:
B(string name, A* a):myA(a), name(name){
cout << "Works with pointer" << endl;
};
private:
A* myA;
string name;
};
class A{
public:
A(){
cout << "Constructing A" << endl;
if(bs.empty()) cout << "Vector is empty" << endl;
bs.push_back(B("First", this));
cout << "Array has " << bs.size() << " elements." << endl;
};
private:
std::vector<B> bs;
};
int main() {
cout << "Start" << endl;
A …Run Code Online (Sandbox Code Playgroud) 作为C++的新手,我有一个关于g ++编译器的基本问题,特别是包含库.考虑以下makefile:
CPPFLAGS= -I libraries/boost_1_43_0-bin/include/ -I libraries/jpeg-8b-bin/include/
LDLIBS= libraries/jpeg-8b-bin/lib/libjpeg.a
# LDLIBS= -L libraries/jpeg-8b-bin/lib -llibjpeg
all: main
main: main.o
c++ -o main main.o $(LDLIBS)
main.o: main.cpp
c++ $(CPPFLAGS) -c main.cpp
clean:
rm -rf *.o main
Run Code Online (Sandbox Code Playgroud)
如您所见,我声明了两次LDLIBS变量.如果我使用上面的makefile,我的代码正在编译和工作.但是,如果我停用第一个LDLIBS条目并激活第二个LDLIBS条目,我会得到ld: library not found for -llibjpeg.我认为我libjpeg.a只是没有被召唤libjpeg但是有一些不同的名字.
有没有办法找出给定"库文件"的名称libsomething.a或libsomething.dyn?
好的,谢谢你的所有答案,它现在正在运作.一个小问题仍然存在:简单地省略"lib"或者是否有一种标准化的方法来查找名称是一种惯例吗?
c++ ×2
java ×2
architecture ×1
classpath ×1
eclipse ×1
g++ ×1
inheritance ×1
subclass ×1
type-safety ×1