我有一个抽象类:
PREFIX?=/usr/local/bin
install_path=$(DESTDIR)$(PREFIX)
encrypt_script=encrypt-file-aes256
decrypt_script=decrypt-file-aes256
distrib_name=openssl-file-encryption-decryption-shell-scripts
.PHONY: check install uninstall distrib
check: $(encrypt_script) $(decrypt_script) SHA512SUMS
echo && sha512sum --check --status SHA512SUMS && ( echo "Ok. You may use 'sudo make install' or '(sudo) make install PREFIX=SomeDir' command now." ) || ( echo "ERROR: Files hash sum mismatch!" && echo && exit 1 )
install: check
echo && [ -d $(install_path) ] || mkdir --parents $(install_path)
install --verbose --mode=0755 --target-directory=$(install_path) $(encrypt_script) $(decrypt_script)
uninstall:
rm $(install_path)/$(encrypt_script) $(install_path)/$(decrypt_script)
rmdir --ignore-fail-on-non-empty $(install_path)
distrib: check $(encrypt_script) $(decrypt_script) Makefile SHA512SUMS
if [ $$(id --user) -eq 0 ]; then ( echo && echo "Target 'distrib' has to be run as normal user!" && echo && exit 1 ) fi
rm --force $(distrib_name).tar.xz
rm --force $(distrib_name).tar.xz.asc
rm --force --recursive $(distrib_name)
mkdir $(distrib_name)
# sha512sum $(encrypt_script) $(decrypt_script) > $(distrib_name)/SHA512SUMS
cp $(encrypt_script) $(decrypt_script) Makefile SHA512SUMS $(distrib_name)
wget --quiet --output-document=$(distrib_name)/LICENSE https://git.io/fxByv # https://raw.githubusercontent.com/burianvlastimil/openssl-file-encryption-decryption-shell-scripts/master/LICENSE
wget --quiet --output-document=$(distrib_name)/README.md https://git.io/fxByJ # https://raw.githubusercontent.com/burianvlastimil/openssl-file-encryption-decryption-shell-scripts/master/README.md
chmod 755 $(distrib_name)/$(encrypt_script) $(distrib_name)/$(decrypt_script)
chmod 644 $(distrib_name)/Makefile $(distrib_name)/SHA512SUMS $(distrib_name)/LICENSE $(distrib_name)/README.md
tar --create --file=$(distrib_name).tar $(distrib_name)
xz --format=xz -9 --extreme --check=sha256 $(distrib_name).tar
rm --force --recursive $(distrib_name)
gpg --local-user 7D2E022E39A88ACF3EF6D4498F37AF4CE46008C3 --sign --armor --output $(distrib_name).tar.xz.asc --detach-sig $(distrib_name).tar.xz
SHA512SUMS:
sha512sum --check --status SHA512SUMS || sha512sum $(encrypt_script) $(decrypt_script) > SHA512SUMS
我有一个abstract class SuperClass(private val privateVal: Int)
扩展了抽象类。 (data class
)
如何在DataClass
构造函数中将privateVal
用作参数,并将其传递给DataClass
构造函数?
以下操作无效,因为数据类构造函数中仅允许SuperClass
和val
s:
var
答案 0 :(得分:2)
数据类的工作方式不同于常规类。正如您已经注意到的,数据类需要构造函数中的属性。数据类和继承很难,因为您不能像常规类那样传递值。从数据类继承也是不可能的。他们不支持_do_fork
或open
,这意味着它是最终的,不能继承。
实际上,如果您将数据类作为子级,则不可能:
abstract
但是,Kotlin确实支持抽象class Something(something: Int, else: Int) : Parent (something, else)
和var
。如果您绝对需要数据类作为子类(尽管我不建议这样做;根据您的用例,使用常规类可能更好)。
val
这里它覆盖了构造函数中的val,这意味着它仍然可以工作。它是abstract class SuperClass {
protected abstract val privateVal: Int
}
data class Overridden(override val privateVal: Int) : SuperClass()
而不是protected
的原因是因为如果它是private
,将无法继承。
尽管如此,我还是真的建议在这里使用常规类而不是数据类。