在C#中,我们有Type.FullName和Type.Name获取类型的名称(在本例中为类),有或没有命名空间(java-world中的包).
什么是Java相当于Type.Name?
显然,必须有一种比Class.getName()手动使用和剥离包名称更好的方法.
我认为通过一个例子可以最好地理解这个问题,所以我们在这里:
public class Base {
// this method works fine
public void MethodA(dynamic input) {
// handle input
}
}
public class Derived: Base { // Derived was named Super in my original post
// This is also fine
public void MethodB(dynamic input) {
MethodA(input);
}
// This method does not compile and the compiler says:
// The call to method 'MethodA' needs to be dynamically dispatched,
// but cannot be because it is part of a base access expression. …Run Code Online (Sandbox Code Playgroud) 我有一个Java背景,所以我习惯让Maven处理下载和保持最新的依赖关系的所有问题.但是在.NET环境中,我还没有找到一种管理所有这些外部依赖项的好方法.
这里的主要问题是我大规模生产解决方案,而且它们都倾向于依赖于相同的第三方dll.但我不想在每个解决方案下维护每个组件的单独副本.所以我需要一种方法将所有不同的解决方案链接到同一组dll.
我意识到一个解决方案可能是将外部库包含在所有解决方案中包含的"库项目"中,让其他项目通过它引用它们.(或者只是确保从所有项目的同一个地方引用外部dll.)
但有没有更好的方法来做到这一点?(最好使用Visual Studio的某种插件.)
我看过Visual Studio Dependency Manager,它似乎是一个完美的匹配,但是有没有人尝试过真实的?我也看过Maven的.NET端口,但不幸的是我对它们的状态并没有太深刻的印象.(但如果您认为我应该再试一次,请继续向他们推荐.)
那么解决这个问题最聪明的方法是什么?
更新:
我意识到我需要解释链接到同一组dll的意思.
我试图在这里实现的一件事是避免不同的解决方案引用每个组件的不同版本.如果我将组件更新为新版本,则应在下次构建时更新所有解决方案.这将迫使我确保所有解决方案都与最新组件保持同步.
更新2: 请注意,在NuGet或OpenWrap等工具存在之前,这是一个老问题.如果有人愿意提供更新,请继续,我将更改已接受的答案.
我有一个旧的遗留Java Web应用程序,我想在与我的asp.net-applications(在IIS 7上运行)相同的服务器上部署.我需要在端口80上运行所有应用程序,因此我不能在不同的端口上安装两个Web服务器.
java应用程序非常简单,只有几个服务器小程序(没有JSP),其功能非常接近"Hello World".所以我希望servlet引擎尽可能轻量级.我认为Tomcat对此有点矫枉过正.
这样的产品是存在还是我被Tomcat困住了?
如何<TestEvent在Spring中获得实现特定通用接口(例如Filter >)的所有bean的引用?
这是我想用最少的行数实现的:
public interface Filter<T extends Event> {
boolean approve(T event);
}
public class TestEventFilter implements Filter<TestEvent> {
public boolean approve(TestEvent event){
return false;
}
}
public class EventHandler{
private ApplicationContext context;
public void Eventhandler(DomainEvent event) {
// I want to do something like following, but this is not valid code
Map<String, Filter> filters = context.getBeansOfType(Filter<event.getClass()>.class);
for(Filter filter: filters.values()){
if (!filter.approve(event)) {
return; // abort if a filter does not approve the event
}
}
//...
} …Run Code Online (Sandbox Code Playgroud)