我希望能够在C#中编写一个方法,类似于我在Java中的方式...传入一个Class对象,它是一些超类的子类...但我能找到的最好的C#是以下:
public void someMethod(Type t) {
if (t == typeof(SomeType)) ...
}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以在方法签名中强制执行参数必须是SomeType类型或其继承者之一?
我不打算传递所述类型的实例.我想将Type本身作为参数传递.
这是一个背景.
我想创建一个包含Dictionary<SomeEventType, ICollection<EventHandler>>对象的EventManager类,以及registerEventHandler(Type t, EventHandler eh)一个将给定映射Type到的方法EventHandler.
在Java中,我会这样做:
private static Map<Class<? extends Event>, Collection<EventHandler>> eventHandlers;
public static void registerListener(Class<? extends Event> event, EventHandler handler) {
if (eventHandlers.get(event) == null) {
HashMap<EventHandler> handlers = new HashMap<EventHandler>()
eventHandlers.put(event, handlers) ...
}
}
Run Code Online (Sandbox Code Playgroud) gradle 中应用程序插件中的distTar和distZip任务的正常行为似乎是将src/dist的内容复制到 zip 和 tar 文件中,但我在src/dist中有一个子文件夹,我想从默认分发中排除它,并将其包含在一个新的(扩展的)任务中,可能被称为 distZipWithJRE。
我已经能够在默认任务中排除此文件夹,如下所示:
distributions.main {
contents {
from('build/config/main') {
into('config')
}
from('../src/dist') {
exclude('jre')
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何定义与原始(未修改)任务一样行为的第二个任务?
我正在尝试设置我的IntelliJ工作区以在eclipse项目上进行开发.我遇到的一件事情令人困惑:
Error:(24, 8) java: SomeClass.java:24: getHeader(java.lang.String) in org.springframework.mock.web.MockHttpServletResponse cannot implement getHeader(java.lang.String) in javax.servlet.http.HttpServletResponse; attempting to use incompatible return type
found : java.lang.Object
required: java.lang.String
Run Code Online (Sandbox Code Playgroud)
问题是以下类定义:
public class SomeClass extends MockHttpServletResponse {
Run Code Online (Sandbox Code Playgroud)
问题似乎是因为MockHttpServletResponse实现Collection<String> getHeaders(String)为public List getHeaders(String name).在这里,我可以看到实现方法使用raw List,其中父级要求Collection输入泛型String.除了可能不是类型安全之外,为什么IntelliJ会将此标记为编译器错误而不是警告?
我无法更改任何这些库.我只是想在IntellJ 14中完成已经工作的东西而没有Eclipse 4.3+中的抱怨.
我已经更新到IntelliJ 15.0,该项目现在使用Java 1.7而不是1.6.我仍在使用IntelliJ遇到这个问题,但问题并非在Eclipse中出现.我可以通过IntelliJ使用现有的Ant脚本编译项目,但我无法通过IDE进行调试.
这是我的班级定义
public class ExecutableServletResponse extends MockHttpServletResponse {
...
Run Code Online (Sandbox Code Playgroud)
以下是我的"消息"窗格中显示的错误:
Error:(24, 8) java: getHeader(java.lang.String) in org.springframework.mock.web.MockHttpServletResponse cannot implement getHeader(java.lang.String) in javax.servlet.http.HttpServletResponse
return type java.lang.Object is not compatible with …Run Code Online (Sandbox Code Playgroud) 正如主题所述,我需要描述一种不使用递归来评估二进制算术表达式树的方法.没有给我任何其他细节或说明.
至于我对这些事情的理解,我需要模拟树的顺序遍历.假设在我的书列出的ADT方法的可用性,我有hasLeft(),hasRight(),left(),right(),isInternal(),和isExternal()方法.我需要问我的教授我是否可以制作自己的方法,但是没有parent()方法可以使用,所以我可以遍历树.虽然,我确实有一种root()方法.
有人可能会指出我正确的方向来弄清楚如何做到这一点?我没有想到没有递归的方法,因为我没有立即跳回树的方法.
public class Motor implements Measurable {
...
}
public Measurable motorTemperature = new Motor();
Run Code Online (Sandbox Code Playgroud)
对象的类型是motorTemperature什么?是电机,可衡量还是两者兼而有之?
考虑以下脚本来停止和启动 tomcat:
#!/bin/bash
# Shutdown tomcat and delete all the logs
echo --- Shutting down Tomcat...
sh /opt/tomcat/bin/shutdown.sh -force &> /dev/null
rm -f /opt/tomcat/logs/* &> /dev/null
echo OK
# Startup tomcat
sh /opt/tomcat/bin/startup.sh &> /dev/null
echo --- Starting up Tomcat...
until [ "`curl --silent --show-error --connect-timeout 1 -I http://localhost:8080 | grep 'Coyote'`" != "" ];
do
sleep 10
done
echo OK
Run Code Online (Sandbox Code Playgroud)
我希望能够做的是在说明正在发生的情况的消息所在的同一行上显示“确定”。我怎样才能实现这个目标?
请考虑以下情形:
Object o1 = new Object();
Object o2 = new Object();
HashMap<Object, Object> map = new HashMap<Object, Object>();
map.put(o1, o2);
boolean test1 = map.get(o1) == o2; // This evaluates to true
// Now lets say we alter the state of o1:
o1.setSomeInternalState(Object newState);
boolean test2 = map.get(o1) == o2; // This evaluates to false, because now map.get(o1) returns null
Run Code Online (Sandbox Code Playgroud)
假设o1的类已被覆盖equals()并且hashCode().
我已经在调试过程中遇到过这个问题,因为我已经明确覆盖equals和hashCode一个特定的对象上我用了一些业务逻辑.我完全理解为什么当我改变它的状态时对象的哈希码会改变,但为什么map.get(o1)会因为它而返回null?只有一个对象,所以密钥的哈希码不应该匹配吗?
在硬盘故障导致需要重新安装操作系统之前,我在使用 Windows 7 的计算机上完成了基于 Java 8u45 的项目的所有开发。据我所知,一切都应该与我之前的设置非常相似,但现在我注意到在新安装上运行应用程序时出现错误,但在共同的设备上却没有发生相同的错误工人的机器也运行 Windows 7。问题是Files.probeContentType(Path)在我的机器上似乎总是返回 null,而它在另一台(和我以前的)机器上返回预期的 mime 类型。
我们都使用 JDK 8u45(该项目暂时与此版本绑定)。我的同事正在使用 IDEA 14,而我正在使用 IDEA 15。还应该注意的是,它似乎与 IDE 无关,因为我在从编译的可执行文件运行应用程序时遇到了相同的问题(使用 Launch4j ,即使使用捆绑的 JRE)
有什么原因可以解释为什么我的开发环境会返回null该方法Files.probeContentType,但另一台具有相同版本操作系统的机器不会返回?
我正在学习 C++ 的细节,同时尝试阅读和解析一些 FLAC 源代码(我目前只知道 Java 和 C#),我发现了这一点:
class OurDecoder: public FLAC::Decoder::File {
public:
OurDecoder(FILE *f_): FLAC::Decoder::File(), f(f_) { }
protected:
FILE *f;
...
};
OurDecoder decoder(fout);
if(!decoder) {
fprintf(stderr, "ERROR: allocating decoder\n");
fclose(fout);
return 1;
}
Run Code Online (Sandbox Code Playgroud)
据我所知,该行OurDecoder decoder(fout);正在创建一个新实例OurDecoder并调用它decoder。这(在某种程度上)相当于 Java 语法OurDecoder decoder = new OurDecoder(fout);,只不过如果我理解正确的话,这个特定的语法在堆栈上而不是在堆上分配对象。但无论如何,这不是我的问题..
我很好奇(我以前从未见过类似的东西)是这样的声明if(!decoder)。这里到底发生了什么?这和Java的类似吗if (decoder == null)?
我正在为一个基于 Java 的大型 web 应用程序设计一个新的聊天模块,该应用程序默认使用 Tomcat,但支持我们的一个客户端的 WebLogic。我一直在研究为此目的使用 WebSocket,但我发现 WebSocket servlet 似乎没有通用接口,例如javax.servlet.http.HttpServlet.
因此,考虑到我可能需要为我希望使用的每个 servlet 容器定义不同的 servlet 实现,我该如何处理我 100% 不知道我在哪个容器中的情况?