我有一个小的java项目,我和朋友一起工作.我们都使用eclipse与egit插件和github进行版本管理.
除了JRE库,我们使用javafx和RXTX库.由于我们都需要库,我们将它们放在项目的lib文件夹中.然后我们设置.classpath来引用项目中的库,并将.classpath推送到github.
那时,我们意识到,不同的计算机需要不同的库,并且在CVS中使用.classpath文件可能是个坏主意.
所以我的问题是,这里的最佳做法是什么?提交.classpath文件似乎是一个坏主意,但是我希望能够控制项目中使用的库,因此为库jar提供其他项目文件可能是一个好主意; 然后,拉动项目的人可以轻松地将他的系统的jar添加到类路径中.但是,因此我必须为每个系统(win32,win64,linux,...)提供javafx和RXTX库,这似乎也不是最好的事情.
我觉得这可能已经被问过,但是我找不到令人满意的问题/答案.
我正在构建一个覆盆子pi的应用程序,并使用pi4j作为GPIO上软件PWM的依赖.我想在我的本地机器上测试我的代码,所以我想在没有pi4j依赖项的情况下编译我的代码并跳过对库的方法调用.
示例代码:
(ns led-server.model
(:require [clojure.tools.logging :as log])
(:import [com.pi4j.wiringpi SoftPwm Gpio])) ;; pi4j dependency, only compiles on rPi
(defn- soft-pwm-write [pin value]
(let [ival (Math/round (double (* value RANGE)))]
(SoftPwm/softPwmWrite pin ival) ;; call to pi4j. This is what I want to skip
(log/info "pin" pin "set to" ival))
)
Run Code Online (Sandbox Code Playgroud)
pi4j需要wiringPi C库,它只能在树莓派上使用(这很有意义).要在我的开发机器上进行测试,只需查看日志打印输出即可.我不想评论:import和方法调用测试,我想要一个更优雅的解决方案.
假设我已经将TableView<T>javafx提供的默认类子类化,并创建了一个类PersonTableView extends TableView<Person>.该子类存在于java代码中,根本不使用fxml.它定义并封装了我专门为我的Person对象所需的行为.
现在我想在fxml文件中使用我的自定义类的实例,就像我将使用所有默认控件一样.这正是我的问题,我不知道如何做到这一点,或者这是否是一个好的/共同的设计决定.
我想在我自己的类中封装我特定TableView的行为,但是应该在fxml中定义布局,因为它与逻辑无关,它只是化妆品.
我想象一种类似于.NET的WPF中的语法和功能,你可以在任何其他控件中使用标记中的自定义类,因为xaml和c#比java和fxml更紧密耦合.
从我目前的观点来看,我所描述的内容无法完成,而我最终只会使用非常少量的fxml和更多代码,即使对于刚刚布局的部分也是如此.例如,我不想使用这样的代码:
AnchorPane.setRightAnchor(customControl, 65.0);
Run Code Online (Sandbox Code Playgroud)
因为我相信在我的fxml中定义它是一个好主意.
所以我的问题是,我如何实现上面所描述的内容; 或者,如果这种情况不常见,那么获得类似功能的常用"最佳实践"方法是什么?
假设我想做这样的事情:
class Foo
{
public event BarHandler Bar;
...
}
class FooList<T> : List<T> where T : Foo
{
public override void Add(T item)
{
item.Bar += Bar_Handler;
base.Add(item);
}
private void Bar_Handler ...
...
}
Run Code Online (Sandbox Code Playgroud)
但是,Add在List<T>不是虚拟的,所以我不能使用override,我将不得不求助于new代替.然而,这并没有提供多态性,我担心通过FooList简单地引用可能引入的细微错误List,这将导致我的事件处理程序没有被添加.
我目前的具体情况是:我想为ObservableCollection实现的项子类化,INotifyPropertyChanged如果添加/删除它们,则为这些项添加/删除事件处理程序.然后,如果Collection中的任何Item发生更改,我将提供一个Event.
我想为我的特定问题以及潜在的一般问题找到解决方案,因为这是我偶然发现的一些想法,来自java背景.