我知道class/jar可执行格式.但jar/class无法确保源安全性,因为java源代码(.java)可以从中检索.我正在寻找一种源安全/不可检索的格式.
我正在尝试设计将在我的应用程序内部使用的接口.以Google为例,我努力减少公共API的混乱.但是,有一些便利方法是根据最小方法定义的.当我在方便和整洁之间寻求平衡时,我应该考虑哪些因素?
Google示例:in HashBiMap(doc):
为什么BiMap没有getKeyForValue()方法?
我们确实考虑过它(Doug Lea甚至半开玩笑地建议将其命名为teg()!).但你真的不需要它; 只需调用inverse().get().
Set接口上的一个例子:add()并且remove()是最小的方法,addAll()而且removeAll()是为了方便.addAll()可以实现add(),因此它并没有真正为客户提供使用的新功能Set.但它确实清理了客户端代码.
我考虑过制作一个Utility包含更多便利方法的课程.但是后来我离开了OOP,并且我必须在每次调用中包含被操作的对象作为参数.虽然我猜这是Java Collections类的例子.
为什么decorator不能装饰静态方法或类方法呢?
from decorator import decorator
@decorator
def print_function_name(function, *args):
print '%s was called.' % function.func_name
return function(*args)
class My_class(object):
@print_function_name
@classmethod
def get_dir(cls):
return dir(cls)
@print_function_name
@staticmethod
def get_a():
return 'a'
Run Code Online (Sandbox Code Playgroud)
双方get_dir并get_a导致AttributeError: <'classmethod' or 'staticmethod'>, object has no attribute '__name__'.
为什么decorator依赖属性__name__而不是属性func_name?(Afaik所有函数,包括classmethods和staticmethods,都有func_name属性.)
编辑:我正在使用Python 2.6.
在HTML表单上,我有INPUT文本框,后跟一个链接,然后是另一个INPUT文本框.我想从tabindex/tab顺序中删除链接:
<p>
<input type="text" name="field1" id="field1" value="" />
<a href="..a url.." id="link1">more info</a>
</p>
<p>
<input type="text" name="field2" id="field2" value="" />
</p>
Run Code Online (Sandbox Code Playgroud)
tab顺序是field1,link1,field2,我希望它在tabindex/order中完全没有link1的field1,field2.除了通过tabindex属性重新排序之外,还有什么方法可以完全删除tab1中的link1吗?
在C#中编写文件路径时,我发现我可以编写类似"C:\"或"C:/"的内容并获得相同的路径.推荐哪一个?我听说使用单个/比使用\更推荐(使用\作为转义序列).
我正在使用Ruby on Rails的authlogic gem,我一直在使用以下内容来获取当前登录用户的id:
current_user = UserSession.find
id = current_user && current_user.record.id
Run Code Online (Sandbox Code Playgroud)
我不明白current_user && current_user.record.id如何返回当前用户ID.我认为这将返回一个布尔值.谁能解释一下这是如何工作的?
如何告诉paint方法仅在JPanel上绘制背景而不是在整个JFrame上绘制背景.我的JFrame大小比JPanel大.当我尝试为JPanel绘制网格背景时,网格似乎遍布JFrame而不仅仅是JPanel.
这部分代码:
public class Drawing extends JFrame {
JPanel drawingPanel;
...........
public Drawing (){
drawingPanel = new JPanel();
drawingPanel.setPreferredSize(new Dimension(600,600));
}
public void paint(Graphics g)
{
super.paintComponents(g);
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
paintBackground(g2); //call a METHOD to paint the for JPANEL
}
private void paintBackground(Graphics2D g2)
{
g2.setPaint(Color.GRAY);
for (int i = 0; i < drawingPanel.getSize().width; i += 300)
{
Shape line = new Line2D.Float(i, 0, i, drawingPanel.getSize().height);
g2.draw(line);
}
for (int i = 0; i < drawingPanel.getSize().height; …Run Code Online (Sandbox Code Playgroud)