有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (2) 个答案

  1. # 1 楼答案

    "Is the only solution to write tests for each method?"

    你是说你没有为Java中的每个方法编写测试吗

    如果用Java为每个方法编写测试,那么什么都不会改变,是吗

    renaming a method, seems so risky!

    对。不要这样做

    adding/removing parameters seems so risky!

    什么?你说的是可选参数吗?如果是这样的话,那么在Java中使用多个重载名称似乎既危险又令人困惑。拥有可选参数似乎更简单


    如果你继续搜索最常见的Python问题,你会发现有些问题是慢性问题

    • 如何更新PYTHONPATH

    • 为什么一些随机浮点计算与数学抽象不同可能表明了这一点

    • 使用Python3并键入Python2教程中的代码

    • 为什么Python没有超复杂的protectedprivatepublic声明

    • 为什么Python没有枚举类型

    #1的长期问题似乎是使用可变对象作为函数的默认值。简单地避免这种情况

  2. # 2 楼答案

    我想说的是,第一个gotcha试图用动态语言编写静态类型的代码

    不要犹豫,使用一个标识符来指向一个字符串,然后在代码的自包含部分中指向一个列表

    keys = 'foo bar foobar' # Imagine this coming in as an argument
    keys = keys.split() # Now the semantically chose name for the argument can be 
                        # reused As the semantically chosen name for a local variable
    

    不要犹豫,要像对待常规值一样对待函数:它们是。以下面的解析器为例。假设我们想把所有的头标签和ul标签都像ol标签一样对待

    class Parser(HTMLParser):
        def __init__(self, html):
            self.feed(html)
    
        def handle_starttag(self, tag, attrs):
            parse_method = 'parse_' + tag    
            if hasattr(self, parse_method):  
                getattr(self, parse_method)(attrs)
    
    
        def parse_list(self, attrs):
            # generic code
    
        def parse_header(self, attrs):
           # more generic code
    
        parse_h1 = parse_h2 = parse_h3 = parse_h4 = parse_h5 = parse_h6 = parse_header
        parse_ol = parse_ul = parse_list
    

    这可以通过在java等语言中的handle_starttag方法中使用不太通用的代码来实现,方法是跟踪哪些标记映射到同一个方法,但如果决定要处理div标记,则必须将其添加到调度逻辑中。在这里,您只需添加方法parse_div,就可以开始了

    不要打字鸭型

    def funtion(arg):
        if hasattr(arg, 'attr1') and hasattr(arg, 'attr2'):
             foo(arg):
        else:
             raise TypeError("arg must have 'attr1' and 'attr2'")
    

    isinstance(arg, Foo)相反。这允许您通过attr1attr2传入任何对象。例如,这允许您传入一个围绕对象的跟踪类,以便进行调试。要在Java AFAIK中实现这一点,您必须修改该类

    正如THC4k所指出的,另一种(更具python风格的)方法是EAPF习语。 我不喜欢这样,因为我喜欢尽早发现错误。但是,如果您希望代码很少失败,那么它的效率会更高。不要告诉任何人我不喜欢它,尽管他们会停止认为我知道如何编写python。下面是THC4k提供的一个示例

    try: 
        foo(arg): 
    except (AttributeError, TypeError): 
        raise InvalidArgumentError(foo, arg)
    

    我们是否应该捕捉AttributeErrorTypeError或者只是让它们传播到知道如何处理它们的地方,这是一个有待解决的问题,但这只是一个例子,所以我们将让它飞起来