多年来,我一直在使用命名块来限制临时变量的范围.我从未在其他任何地方看到过这种情况,这让我想知道这是不是一个坏主意.特别是因为Eclipse IDE默认将这些标记为警告.
我认为,在我自己的代码中,我已经使用了这个效果.但是,既然好的程序员在看到它时会不信任它,这是非惯用的,我真的有两种方法可以从这里开始:
示例(在更大的方法中):
final Date nextTuesday;
initNextTuesday: {
GregorianCalendar cal = new GregorianCalendar();
... // About 5-10 lines of setting the calendar fields
nextTuesday = cal.getTime();
}
Run Code Online (Sandbox Code Playgroud)
这里我使用GregorianCalendar来初始化日期,我想确保我不会意外地重复使用它.
有些人评论说你实际上不需要命名块.虽然这是真的,但原始块看起来更像是一个bug,因为意图不明确.此外,命名的东西鼓励你思考块的意图.这里的目标是识别代码的不同部分,而不是为每个临时变量赋予自己的范围.
很多人评论说最好直接采用小方法.我同意这应该是你的第一直觉.但是,可能有几个缓解因素:
使用命名范围的优点:
缺点:
不是惯用的:没有看到使用命名块的程序员(即除了我之外的所有人)都认为它有问题,因为他们无法找到对块名称的引用.(就像Eclipse一样.)让事情成为惯用语是一场艰苦的战斗.
它可以作为不良编程习惯的借口,例如:
注意:基于一些深思熟虑的回答,我已经广泛地编辑了这个问题.谢谢!
我正在尝试编写一个正则表达式来替换所有未包含在引号中的空格,所以这样的事情:
a = 4, b = 2, c = "space here"
Run Code Online (Sandbox Code Playgroud)
会回来这个:
a=4,b=2,c="space here"
Run Code Online (Sandbox Code Playgroud)
我花了一些时间搜索这个网站,我发现了一个类似的q/a(用空格分割一个字符串 - 保留引用的子串 - 在Python中),它将用一个可以在之后重新替换的标记替换引号内的所有空格擦拭所有其他空间...但我希望有一种更清洁的方式.
我有图像数据,我想得到一个用作opengl纹理的子图像.
glGenTextures(1, &m_name);
glGetIntegerv(GL_TEXTURE_BINDING_2D, &oldName);
glBindTexture(GL_TEXTURE_2D, m_name);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, m_width, m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, m_data);
Run Code Online (Sandbox Code Playgroud)
如何获得作为纹理加载的图像的子图像.我认为它与使用glTexSubImage2D有关,但我不知道如何使用它来创建我可以加载的新纹理.呼叫:
glTexSubImage2D(GL_TEXTURE_2D, 0, xOffset, yOffset, xWidth, yHeight, GL_RGBA, GL_UNSIGNED_BYTE, m_data);
Run Code Online (Sandbox Code Playgroud)
我什么都看不到,调用glCopyTexSubImage2D只是占用了我的帧缓冲区.谢谢
我正在研究将要查询我们员工数据库的工作申请.最终用户希望能够根据标准名称/部门标准进行搜索,但他们也希望能够灵活地查询所有在健康部门工作的名字为"James"的人.我想要避免的一件事是简单地让存储过程获取参数列表并生成要执行的SQL语句,因为这将在内部级别打开SQL注入的大门.
可以这样做吗?
假设我有一个带有可变数量参数的C函数:如何调用另一个函数,该函数需要从其内部获取可变数量的参数,并将所有参数传递到第一个函数中?
例:
void format_string(char *fmt, ...);
void debug_print(int dbg_lvl, char *fmt, ...) {
format_string(fmt, /* how do I pass all the arguments from '...'? */);
fprintf(stdout, fmt);
}
Run Code Online (Sandbox Code Playgroud) Visual Studio使调用Web服务变得容易,试图弄清楚幕后发生的事情很困难.
在调用Web服务时,如何查看从.Net应用程序生成的实际XML?
在我使用数据库的过程中,我注意到我编写了查询字符串,在这个字符串中,我必须在list/array/collection的where子句中加入一些限制.应该是这样的:
select * from customer
where customer.id in (34, 26, ..., 2);
Run Code Online (Sandbox Code Playgroud)
您可以通过将此问题简化为具有字符串集合的问题并希望仅在一个字符串中创建此字符串的逗号分隔列表来简化此操作.
我到目前为止使用的方法是这样的:
String result = "";
boolean first = true;
for(String string : collectionOfStrings) {
if(first) {
result+=string;
first=false;
} else {
result+=","+string;
}
}
Run Code Online (Sandbox Code Playgroud)
但这是你可以看到非常丑陋的.您无法看到第一眼看到的情况,特别是当构造的字符串(如每个SQL查询)变得复杂时.
你(更)优雅的方式是什么?
如果您为ATG Dynamo开发,您如何构建模块和依赖项?
你如何构建项目?源目录,JAR配置等.
你如何构建和部署?你用什么工具?
那里有很多建议你不应该公开地公开你的字段,而是使用普通的属性.我一遍又一遍地看到它.
我理解这些论点,但在大多数情况下我认为这不是一个好建议.
有没有人有一个真正重要的时间的例子?在写一个琐碎的财产时,将来可能会有一些重要的事情(或者当没有使用它时会让他们陷入真正的麻烦)?
编辑:DataBinding参数是正确的,但不是很有趣.DataBinding代码中的一个错误是它不接受公共字段.因此,我们必须编写属性来解决该bug,而不是因为属性是明智的类设计选择.
编辑:要清楚,我正在寻找现实世界的例子,而不是理论.真正重要的时刻.
编辑:在setter上设置断点的能力似乎很有价值.为调试器设计我的代码是不幸的:我宁愿调试器变得更聪明,但考虑到我们的调试器,我将采用这种能力.好东西.
我想做这样的事情:
List<Animal> animals = new ArrayList<Animal>();
for( Class c: list_of_all_classes_available_to_my_app() )
if (c is Animal)
animals.add( new c() );
Run Code Online (Sandbox Code Playgroud)
所以,我想查看我的应用程序的Universe中的所有类,当我找到一个来自Animal的类时,我想创建一个该类型的新对象并将其添加到列表中.这允许我添加功能而无需更新事物列表.我可以避免以下情况:
List<Animal> animals = new ArrayList<Animal>();
animals.add( new Dog() );
animals.add( new Cat() );
animals.add( new Donkey() );
...
Run Code Online (Sandbox Code Playgroud)
通过上面的方法,我可以简单地创建一个扩展Animal的新类,它将自动被拾取.
更新:2008年10月16日上午9:00太平洋标准时间:
这个问题引起了很多很好的回应 - 谢谢.从回答和我的研究中,我发现我真正想要做的就是在Java下不可能.有一些方法,比如ddimitrov的ServiceLoader机制可以工作 - 但它们对我想要的东西非常重,我相信我只是将问题从Java代码转移到外部配置文件.
另一种表达我想要的方式:我的Animal类中的静态函数查找并实例化从Animal继承的所有类 - 无需任何进一步的配置/编码.如果我必须配置,我也可以在Animal类中实例化它们.我理解,因为Java程序只是一个松散的.class文件联合体,就像它一样.
有趣的是,在C#中,这似乎相当微不足道.
java ×3
sql ×2
.net ×1
atg ×1
atg-dynamo ×1
c ×1
c# ×1
c++ ×1
coding-style ×1
fiddler ×1
inheritance ×1
opengl ×1
parameters ×1
reflection ×1
regex ×1
ruby ×1
search ×1
sql-server ×1
string ×1
web-services ×1
xml ×1