Cocoa框架有一个约定,总是调用继承类self = [super init]的init方法,因为[super init]可能返回一个新实例.
如果我这样做会怎么样?
@interface MyClass : NSObject /* or any other class */ {
int ivar_;
}
@end
@implementation MyClass
- (id)init {
ivar_ = 12345;
if ((self = [super init])) {
NSLog(@"ivar_'s value is %d", ivar_);
}
return self;
}
@end
Run Code Online (Sandbox Code Playgroud)
在[super init]返回新实例的情况下,我将在控制台中看到什么?ivar_'s value is 0?
我想不出一种方法来检查这个,因为我不知道哪个类可以从它的init方法返回一个新实例.此外,似乎无法在文档中找到此方案的明确说明.
任何人都可以帮我吗?谢谢!
我需要在中分配默认随机值__init__().例如:
import math
import random
class Test:
def __init__(self, r = random.randrange(0, math.pow(2,128)-1)):
self.r = r
print self.r
Run Code Online (Sandbox Code Playgroud)
如果我创建了10个Test实例,它们都会获得完全相同的随机值.我不明白为什么会这样.我知道我可以在其中分配随机值__init__(),但我很好奇为什么会发生这种情况.我的第一个猜测是种子是当前时间,并且对象的创建距离太近,因此获得相同的随机值.我创建的对象间隔1秒,但结果仍然相同.
我想知道我们何时在项目中使用"init"方法?我见过很多没有它的项目,他们使用"applicationDidFinishLaunching"启动应用程序,但不是init方法,你对此有什么想法吗?
非常感谢
是否有一个总是在Cocoa中调用的方法?许多类都有init或者initWith,但更糟糕的是它们可以从笔尖或其他东西加载.在这种情况下,我不想在周围找到它是如何做到的.我只是想设置一些初始变量和其他的东西,我想一个方法子类,我可以依靠不管它是一个UIView,UIViewController或者UITableViewCell等
好吧,我将首先展示我的代码:
@Override
public void init() throws ServletException {
super.init();
try {
securityController = SecurityControllerFactory.getInstance().create();
} catch (Exception e) {
System.err.println("Error creating security controller; " + e.getMessage());
}
// max allowed uploaded uploadedFile size is 10 MB
maxFileSize = getBytes(10);
maxMemSize = getBytes(2);
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,编译器迫使我使用try/catch来实例化SecurityController.但就我而言,我认为如果无法实例化安全控制器,它应该停止实例化Servlet并抛出异常.对此有何建议/解释?
我有一堂课叫Letter
class Letter
{
init() {}
}
Run Code Online (Sandbox Code Playgroud)
我对这个类有一个扩展:
extension Letter
{
convenience init(file_path:String) {
self = Letter.loadFromFile(file_path)
}
class func loadFromFile(file_path:String)->Letter {...}
}
Run Code Online (Sandbox Code Playgroud)
我需要使用文件路径创建和初始化,当我调用时,Letter(file_path)我需要一个由 func 返回的新对象loadFromFile。如何在 init 方法中赋值或返回一个新对象?
它给出了错误:
无法赋值:“self”是不可变的
我正在尝试安装 Levenshtein 模块,如您在此处看到的。
我能够setup.py通过 运行该文件python setup.py build。
python然后,当我通过从终端立即进入 python 时,在与文件夹相同的文件夹中Levenshtein,我尝试导入它:
import Levenshtein,
但我收到以下错误:
>>> import Levenshtein
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "Levenshtein/__init__.py", line 1, in <module>
from Levenshtein import _levenshtein
ImportError: cannot import name _levenshtein
Run Code Online (Sandbox Code Playgroud)
并且,当我查看文件夹时Levenshtein,我看到两个与该名称相似的文件:
_levenshtein.c _levenshtein.h
Run Code Online (Sandbox Code Playgroud)
这个导入有什么意义,我应该如何获取名称为 的文件_levenshtein?
我试图在Linux中从systemd服务启动一个jar.我正在执行的jar假定在当前目录中有一个xml文件.我使用-config参数传递该文件的名称.我创建的示例服务如下:
[Unit]
Description=my service
After=network.target
[Service]
Type=simple
Environment="xml_file_name=sample.xml"
ExecStart=/usr/bin/java -jar /path/to/jar/myapp.jar -config ${xml_file_name}
上面的服务文件放在/ usr/lib/systemd/system目录中,名为myservice.service.我正在执行以下命令来启动它:
systemctl daemon-reload
systemctl stop myservice.service
systemctl start myservice.service
systemctl status myservice.service
该systemctl status myservice.service命令显示jar文件已运行,但我的应用程序说它无法找到$ {xml_file_name}.
另外,我的jar声明它是从/目录执行的.我认为这是问题的一部分,因为$ {xml_file_name}仅适用于/ path/to/jar /目录.
事情尝试:
-Xbootclasspath/p:"/path/to/jar/":预先添加jar位置的路径,以便可以看到$ {xml_file_name}.
将/ path /更改为/ jar /以确保它已启用所有可能的权限
我尝试User=root在[Service]我的systemd服务部分添加,但它没有改变.无论哪种方式,只有root用户在计算机上,并且权限似乎都检查出来.
是什么让这更奇怪的是,如果我cd到/,然后手动执行:
/usr/bin/java -jar /path/to/jar/myapp.jar -config sample.xml
一切话都很好.
有什么明显的东西我在这里不见了吗?是否有可能告诉systemd服务,执行这个java jar,但确保工作路径/path/to/jar/与/?相反?
我是 Gitkraken 的新用户,有一个工作流程我无法从文档中轻易弄清楚:
创建本地很容易,但是“添加远程”给了我一个奇怪的错误消息,“不匹配”。我不太理解这个“添加远程”命令:它可以在远程站点上创建一个存储库,还是仅仅附加到必须已经存在的存储库?我通过浏览器创建它并在终端使用“git add remote”克服了这个错误,但这很笨拙,我想做得更好。
我还尝试通过使用 Gitkraken File > Init 命令并选中“同时克隆”复选框来执行此操作,但这给我带来了错误消息:“目录已存在且不为空。” 不,Gitkraken,你错了!我不想将新的(空)远程存储库克隆到本地,我想将新的本地存储库复制到其中。反向操作!
那么,为新纳入 Git 版本控制的项目创建本地和关联远程的最佳工作流程是什么?
我有一个 Spring boot 应用程序,当从命令行运行时,它可以完美地记录到文件系统(通过logging.level/logging.file属性):
java -jar jarfilename.jar
Run Code Online (Sandbox Code Playgroud)
但是,当我将以下内容放入 pom.xml 中以创建可执行 JAR,然后尝试将其作为 Ubuntu 中的 init 脚本运行时,日志记录根本不会发生。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
以下是我在 Linux 上运行的命令:
ln -s /path/to/executablejar.jar /etc/init.d/myapp
chmod a+x /etc/myapp
/etc/init.d/myapp start
Run Code Online (Sandbox Code Playgroud)
我想这一定是日志记录配置的某种问题,没有考虑可执行 jar 的启动方式,但我很困惑并且希望得到任何指导。
这是我在 application.properties 中的日志记录设置:
logging.level.org.springframework=error
logging.level.com.myapp=debug
logging.level.org.hibernate=error
logging.file=/path/to/a.log
Run Code Online (Sandbox Code Playgroud)