假设我创建了一个对象并将其添加到我的对象中ArrayList.如果我然后使用完全相同的构造函数输入创建另一个对象,那么该contains()方法是否会将两个对象评估为相同?假设构造函数对输入没有做任何有趣的事情,并且存储在两个对象中的变量是相同的.
ArrayList<Thing> basket = new ArrayList<Thing>();
Thing thing = new Thing(100);
basket.add(thing);
Thing another = new Thing(100);
basket.contains(another); // true or false?
Run Code Online (Sandbox Code Playgroud)
class Thing {
public int value;
public Thing (int x) {
value = x;
}
equals (Thing x) {
if (x.value == value) return true;
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
这是class应该如何实现contains()回归true?
编译器如何填充值char array[100] = {0};?它背后的魔力是什么?
我想知道内部编译器如何初始化.
在接口的实现中定义时,我不太了解静态变量.在方法中,我确实理解它们与局部变量的区别,但不是直接在实现中定义的.
看看这些例子.这两者实际上有什么区别?
#include "MyClass.h"
@implementation MyClass
int myInt;
...
@end
Run Code Online (Sandbox Code Playgroud)
和:
#include "MyClass.h"
@implementation MyClass
static int myInt;
...
@end
Run Code Online (Sandbox Code Playgroud)
myInt在两种情况下,所有方法都可以看到,如果我解释了一个正确运行的测试,那么myInt在这两种情况下,对于不同类的实例,它们都是相同的变量.
用于实现Python内置列表数据类型的典型底层数据结构是什么?
令我感到困惑的是,haskell编译器有时会推断出比我预期的更不易变形的类型,例如在使用无点定义时.
似乎问题是"单态限制",默认情况下在旧版本的编译器上启用.
考虑以下haskell程序:
{-# LANGUAGE MonomorphismRestriction #-}
import Data.List(sortBy)
plus = (+)
plus' x = (+ x)
sort = sortBy compare
main = do
print $ plus' 1.0 2.0
print $ plus 1.0 2.0
print $ sort [3, 1, 2]
Run Code Online (Sandbox Code Playgroud)
如果我编译它,ghc我没有获得错误,可执行文件的输出是:
3.0
3.0
[1,2,3]
Run Code Online (Sandbox Code Playgroud)
如果我将main身体改为:
main = do
print $ plus' 1.0 2.0
print $ plus (1 :: Int) 2
print $ sort [3, 1, 2]
Run Code Online (Sandbox Code Playgroud)
我没有编译时错误,输出变为:
3.0
3
[1,2,3]
Run Code Online (Sandbox Code Playgroud)
正如所料.但是,如果我尝试将其更改为:
main = do
print $ …Run Code Online (Sandbox Code Playgroud) polymorphism haskell types type-inference monomorphism-restriction
我有这门课:
class MyClass<N extends Number> {
N n = (N) (new Integer(8));
}
Run Code Online (Sandbox Code Playgroud)
我想得到这些输出:
System.out.println(new MyClass<Long>().n);
System.out.println(new MyClass<Long>().n.getClass());
Run Code Online (Sandbox Code Playgroud)
第一项System.out.println()陈述的输出:
8
Run Code Online (Sandbox Code Playgroud)输出第二个System.out.println()陈述:
java.lang.ClassCastException: java.lang.Integer (in module: java.base)
cannot be cast to java.lang.Long (in module: java.base)
Run Code Online (Sandbox Code Playgroud)为什么我得到第一个输出?是不是也有演员?为什么我在第二个输出中得到异常?
PS:我使用的是Java 9; 我用JShell尝试了它,我在两个输出上都有一个例外.然后我尝试使用IntelliJ IDE并获得第一个输出,但第二个输出异常.
我想定义一个包含read和write方法的类,可以按如下方式调用:
instance.read
instance.write
instance.device.read
instance.device.write
Run Code Online (Sandbox Code Playgroud)
为了不使用隔行扫描类,我的想法是覆盖__getattr__和__setattr__方法并检查,如果给定的名称是device将返回重定向到self.但是我遇到了一个无限递归的问题.示例代码如下:
class MyTest(object):
def __init__(self, x):
self.x = x
def __setattr__(self, name, value):
if name=="device":
print "device test"
else:
setattr(self, name, value)
test = MyTest(1)
Run Code Online (Sandbox Code Playgroud)
如在__init__代码中尝试创建一个新属性x,它会调用__setattr__,再次调用__setattr__,依此类推.我怎么需要更改此代码,即,在这种情况下,一个新的属性x的self创建,持有的价值1?
或者有没有更好的方法来处理像instance.device.read'映射'的调用instance.read?
因为总是存在关于原因的问题:我需要创建xmlrpc调用的抽象,为此myxmlrpc.instance,device.read可以创建非常简单的类似方法.我需要'模拟'这样来模仿这样的多点方法调用.
我打算在我的应用程序中实现多任务.我在这里可以看到很多的方法来做到这一点的AppDelegate喜欢applicationWillResignActive,applicationDidEnterBackground,applicationWillEnterForeground,...
但是......我没有看到它们应该被使用的方式,也没有看到它们为什么不在ViewControllers中......也不是它们在这里的用途.
我的意思是:当应用程序进入后台时,我不知道我的用户是哪个视图.回来,当应用程序进入前台时,我怎么知道该做什么以及我可以调用什么,例如更新视图?
我会理解,如果在每个视图控制器中的那些方法,但在这里,我没有看到它们可以用于具体方式...
你能帮助我理解在这些方法中实现内容的方法吗?
查看Java 6的源代码,HashSet<E>实际上是使用HashMap<E,Object>在Set的每个条目上使用虚拟对象实例来实现的.
我认为这对于条目本身的大小来说浪费了4个字节(在32位机器上).
但是,为什么它仍在使用?是否有任何理由使用它,除了使代码更容易维护?
java ×3
c ×2
python ×2
types ×2
arraylist ×1
c++ ×1
char ×1
evaluation ×1
generics ×1
getattr ×1
hashmap ×1
hashset ×1
haskell ×1
iphone ×1
jshell ×1
list ×1
multitasking ×1
object ×1
objective-c ×1
polymorphism ×1
python-2.7 ×1
setattr ×1
static ×1
variables ×1