采用以下泛型示例
import java.util.List;
import java.util.ArrayList;
public class GenericsTest {
private List<Animal> myList;
public static void main(String args[]) {
new GenericsTest(new ArrayList<Animal>()).add(new Dog());
}
public GenericsTest(List<Animal> list) {
myList = list;
}
public void add(Animal a) {
myList.add(a);
}
public interface Animal {}
public static class Dog implements Animal {}
public static class Cat implements Animal {}
}
Run Code Online (Sandbox Code Playgroud)
它工作正常.但是如你所知,你不能用它构建它
new GenericsTest(new ArrayList<Dog>());
Run Code Online (Sandbox Code Playgroud)
因为,如你所知,add(Animal)可以添加Cats.该建议解决这个问题的方法,即使用通配符也不管用,因为,是的,你可以改变每一个List<Animal>中List<? extends Animal>却有着同样的问题:你可以创建GenericsTest与List<Cat>再添加Dog秒.
所以我的问题是:有没有一种方便的方法来编写这个类一次,然后将它用于所有可能的Animals …
我在一家小型软件商店工作,内部产品和外部咨询.在过去的几年里,我一直在办公室里与其他一些极客一起工作.相当悠闲和富有成效.几乎完美的编码条件:
然而,最近我改变了项目并进入了一个嵌入大公司网站的外部咨询团队,其中包含所有由此产生的官僚BS和管理费用:
这让我疯了.
那么这艘船上的其他人怎么做才能保持理智呢?
我们都知道你不能这样做:
for (Object i : l) {
if (condition(i)) {
l.remove(i);
}
}
Run Code Online (Sandbox Code Playgroud)
ConcurrentModificationException等等......这显然有时起作用,但并非总是如此.这是一些特定的代码:
public static void main(String[] args) {
Collection<Integer> l = new ArrayList<>();
for (int i = 0; i < 10; ++i) {
l.add(4);
l.add(5);
l.add(6);
}
for (int i : l) {
if (i == 5) {
l.remove(i);
}
}
System.out.println(l);
}
Run Code Online (Sandbox Code Playgroud)
当然,这会导致:
Exception in thread "main" java.util.ConcurrentModificationException
Run Code Online (Sandbox Code Playgroud)
...即使多线程没有这样做......无论如何.
什么是这个问题的最佳解决方案?如何在循环中从集合中删除项而不抛出此异常?
我也在Collection这里使用任意,不一定是ArrayList,所以你不能依赖get.
我已经想出如何设置VC++来将代码编译成.lib文件而不是.exe,但是我无法将lib与我的其他.obj文件链接在一起.
这是我如何设置库和应用程序文件夹.(我不确定这是不对的)
AppFolder
App.sln
App.ncb
*.h
*.cpp
Debug
*.obj
App.exe
Run Code Online (Sandbox Code Playgroud)
和硬盘上的其他地方......
LibraryFolder
lib
Library.lib
include
LibrarySolutionFolder
Library.sln
Library.ncb
*.h
*.cpp
Debug
*.obj
Library.lib
Run Code Online (Sandbox Code Playgroud)
我一直在#include我的应用程序的cpp文件中的库*.h文件,一切都编译得很好.只是当它链接时,我得到一个正在搜索的所有.lib文件的列表,并且即使我在VC++目录中列出了Library.lib,它也不在那里.我怎样才能将其链接起来?(我是否正确构建了库文件夹?)
您最喜欢将LINQ to SQL实体类和数据上下文类封装到业务对象中的方法是什么?
你发现在特定情况下工作了什么?
您是否已经发明或采用任何特定模式?
我刚刚研究过这个,不记得怎么做了.我希望能够阻止Firefox在页面内的某些输入字段上运行它的拼写检查功能.我知道这是可能的,但不记得如何设置它.
有没有办法根据我在运行时知道类的名称来创建类的实例.基本上我会在字符串中有类的名称.
我有一个应用程序,允许打开多个NSDocuments.在此应用程序中是一个单一的实用程序窗口,其中包含我想要应用于最前面的文档的一些功能.
我试图在这里使用绑定,所以诀窍是如何干净地将实用程序窗口的用户界面绑定到最前面的文档.目标是然后切换最前面的文档窗口将更新实用程序窗口中的视图; 当文档模型中的状态发生变化时,绑定到最前面文档模型属性的控件将被适当更新.
要从这样的窗口发送动作,只需使用第一响应者即可; 文档对象可以通过响应者链拦截动作.但我想要更多,当然你不能绑定第一响应者.
我有一些想法:
这些似乎都不对.有没有更好的方法来做到这一点,我错过了?
有没有一种简单的方法来转换Java(RGB,HSV和Lab)中的颜色模型.
假设RGB颜色模型:
编辑:我发现ColorSpace类可用于RGB/CIE和许多其他颜色模型之间的转换.
我看到这个主题现在不止一次出现.我希望那些目前处于类似情况或过去的人可以提供一些有见地的建议.如果您也分享过去的经历可能会有用.
因此,这些相当大的Windows窗体应用程序已经开发了多年.虽然开发团队已经尝试将业务逻辑与UI分离,但它并没有完全发生,并且代码中有许多区域,其中业务逻辑硬连接到UI.实际上,在很多地方都可以看到以前尝试采用MVP架构的残余.还有单元测试,但代码覆盖率相对较低.然而,有一些热点 - 每个人都知道的领域变得越来越复杂,他们必然需要.
很多时候,只有当测试人员拿起他们的火炬灯并且真正开始寻找不幸的太晚,昂贵且有风险的错误时,才会发现可能早先发现的错误.工程师,测试人员和PM--都意识到需要做些什么.
什么是最实际的方法来解决这种情况,或改善这种情况?由于这将是一项长期任务,衡量目标进展的最佳方法是什么?如何以客观的术语来定义目标?
java ×3
.net ×2
c# ×1
c#-3.0 ×1
c++ ×1
cocoa ×1
collections ×1
colors ×1
firefox ×1
generics ×1
html-input ×1
iteration ×1
linker ×1
linq-to-sql ×1
static ×1
system.type ×1
unit-testing ×1